mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Merge branch 'test'
This commit is contained in:
commit
f414439a7a
58 changed files with 504 additions and 20930 deletions
|
@ -91,7 +91,7 @@ start_instance() {
|
||||||
p="$((p+1))"
|
p="$((p+1))"
|
||||||
}
|
}
|
||||||
|
|
||||||
is_force_dns_active() { iptables-save | grep -q -w -- '--dport 53'; }
|
is_force_dns_active() { iptables-save 2>/dev/null | grep -q -w -- '--dport 53'; }
|
||||||
|
|
||||||
start_service() {
|
start_service() {
|
||||||
local p=5053 c
|
local p=5053 c
|
||||||
|
@ -191,6 +191,7 @@ dnsmasq_create_server_backup() {
|
||||||
uci -q del_list "dhcp.${cfg}.server=$i"
|
uci -q del_list "dhcp.${cfg}.server=$i"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
uci -q del_list "dhcp.${cfg}.server=127.0.0.1#5353"
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=iperf
|
PKG_NAME:=iperf
|
||||||
PKG_VERSION:=3.11
|
PKG_VERSION:=3.12
|
||||||
PKG_RELEASE:=10
|
PKG_RELEASE:=10
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://github.com/esnet/iperf/archive/refs/tags/
|
PKG_SOURCE_URL:=https://github.com/esnet/iperf/archive/refs/tags/
|
||||||
PKG_HASH:=96e909c0d3ab6034c52328c2954fb3934aaff349395c4bc2611dcd50e6b89875
|
PKG_HASH:=e38e0a97b30a97b4355da93467160a20dea10932f6c17473774802e03d61d4a7
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
--- a/src/flowlabel.h 2021-06-24 13:26:33.142463630 +0200
|
|
||||||
+++ b/src/flowlabel.h 2021-06-24 13:27:45.669235179 +0200
|
|
||||||
@@ -37,21 +37,21 @@
|
|
||||||
conflicts with "netinet/in.h" .
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#ifndef __ANDROID__
|
|
||||||
+#ifndef _LINUX_IN6_H
|
|
||||||
struct in6_flowlabel_req
|
|
||||||
{
|
|
||||||
struct in6_addr flr_dst;
|
|
||||||
__u32 flr_label;
|
|
||||||
__u8 flr_action;
|
|
||||||
__u8 flr_share;
|
|
||||||
__u16 flr_flags;
|
|
||||||
__u16 flr_expires;
|
|
||||||
__u16 flr_linger;
|
|
||||||
__u32 __flr_pad;
|
|
||||||
/* Options in format of IPV6_PKTOPTIONS */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define IPV6_FL_A_GET 0
|
|
||||||
#define IPV6_FL_A_PUT 1
|
|
||||||
#define IPV6_FL_A_RENEW 2
|
|
|
@ -8,12 +8,12 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=libmbim
|
PKG_NAME:=libmbim
|
||||||
PKG_VERSION:=1.26.2
|
PKG_VERSION:=1.26.4
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libmbim
|
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libmbim
|
||||||
PKG_HASH:=10c77bf5b5eb8c92ba80e9b519923ad9b898362bc8e1928e2bc9a17eeba649af
|
PKG_HASH:=f688cec4c4586a17575f5e327448ce62f2000ef6a07c9e4589873d4a68568ad9
|
||||||
|
|
||||||
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=libqmi
|
PKG_NAME:=libqmi
|
||||||
PKG_VERSION:=1.30.4
|
PKG_VERSION:=1.30.8
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libqmi
|
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libqmi
|
||||||
PKG_HASH:=00d7da30a4f8d1185f37cba289cfaf1dfcd04a58f2f76d6acfdf5b85312d6ed6
|
PKG_HASH:=862482ce9e3ad0bd65d264334ee311cdb94b9df2863b5b7136309b41b8ac1990
|
||||||
|
|
||||||
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
LUCI_TITLE:=Firewall and Portforwarding application
|
LUCI_TITLE:=Firewall and Portforwarding application
|
||||||
LUCI_DEPENDS:=+firewall
|
LUCI_DEPENDS:=+@LINUX_5_4:firewall +@LINUX_5_15:uci-firewall
|
||||||
|
|
||||||
PKG_LICENSE:=Apache-2.0
|
PKG_LICENSE:=Apache-2.0
|
||||||
PKG_VERSION:=omr-202103
|
PKG_VERSION:=omr-202103
|
||||||
|
|
|
@ -44,9 +44,9 @@ if uname.release:sub(1,4) ~= "5.15" then
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
end
|
end
|
||||||
if uname.release:sub(1,4) ~= "5.15" then
|
if uname.release:sub(1,4) ~= "5.15" then
|
||||||
o = s:option(Value, "mptcp_version", translate("Multipath TCP version"))
|
o = s:option(ListValue, "mptcp_version", translate("Multipath TCP version"))
|
||||||
o.datatype = "uinteger"
|
o:value(0, translate("0"))
|
||||||
o.rmempty = false
|
o:value(1, translate("1"))
|
||||||
o.default = 0
|
o.default = 0
|
||||||
end
|
end
|
||||||
o = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic"))
|
o = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic"))
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
|
|
||||||
function bandwidth_label(bytes, br)
|
function bandwidth_label(bytes, br)
|
||||||
{
|
{
|
||||||
|
if (bytes < 0) bytes = 0;
|
||||||
var uby = '<%:kB/s%>';
|
var uby = '<%:kB/s%>';
|
||||||
var kby = (bytes / 1024);
|
var kby = (bytes / 1024);
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
[ -z "$(pgrep -f omr-bypass)" ] && /etc/init.d/omr-bypass reload_rules
|
[ -z "$(pgrep -f omr-bypass)" ] && logger -t "firewall.omr-bypass" "reloal omr-bypass rules" && /etc/init.d/omr-bypass reload_rules
|
||||||
|
|
|
@ -8,6 +8,22 @@ EXTRA_COMMANDS="reload_rules bypass_asn"
|
||||||
|
|
||||||
. /usr/lib/unbound/iptools.sh
|
. /usr/lib/unbound/iptools.sh
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables-legacy"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-legacy-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
_add_proto() {
|
_add_proto() {
|
||||||
protoname=$1
|
protoname=$1
|
||||||
[ -z "$protoname" ] && return
|
[ -z "$protoname" ] && return
|
||||||
|
@ -135,26 +151,26 @@ _bypass_mac() {
|
||||||
[ -z "$intf" ] && intf="all"
|
[ -z "$intf" ] && intf="all"
|
||||||
[ -z "$mac" ] && return
|
[ -z "$mac" ] && return
|
||||||
if [ "$intf" = "all" ]; then
|
if [ "$intf" = "all" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539
|
-A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539
|
-A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539$intfid
|
-A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539$intfid
|
-A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -181,18 +197,18 @@ _bypass_lan_ip() {
|
||||||
valid_ip6=$(valid_subnet6 $ip)
|
valid_ip6=$(valid_subnet6 $ip)
|
||||||
if [ "$intf" = "all" ]; then
|
if [ "$intf" = "all" ]; then
|
||||||
if [ "$valid_ip4" = "ok" ]; then
|
if [ "$valid_ip4" = "ok" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass -s $ip -j MARK --set-mark 0x539
|
-A omr-bypass -s $ip -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local -s $ip -j MARK --set-mark 0x539
|
-A omr-bypass-local -s $ip -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
elif [ "$valid_ip6" = "ok" ] && [ "$disableipv6" = "0" ]; then
|
elif [ "$valid_ip6" = "ok" ] && [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539
|
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -200,18 +216,18 @@ _bypass_lan_ip() {
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [ "$valid_ip4" = "ok" ]; then
|
if [ "$valid_ip4" = "ok" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass -s $ip -j MARK --set-mark 0x539$intfid
|
-A omr-bypass -s $ip -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local -s $ip -j MARK --set-mark 0x539$intfid
|
-A omr-bypass-local -s $ip -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
elif [ "$valid_ip6" = "ok" ] && [ "$disableipv6" = "0" ]; then
|
elif [ "$valid_ip6" = "ok" ] && [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539$intfid
|
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -239,36 +255,36 @@ _bypass_dest_port() {
|
||||||
dport="$(echo $dport | sed 's/-/:/')"
|
dport="$(echo $dport | sed 's/-/:/')"
|
||||||
[ -z "$proto" ] && return
|
[ -z "$proto" ] && return
|
||||||
if [ "$intf" = "all" ]; then
|
if [ "$intf" = "all" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539
|
-A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local --protocol $proto --destination-port $dport -j MARK --set-mark 0x539
|
-A omr-bypass-local --protocol $proto --destination-port $dport -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539
|
-A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539$intfid
|
-A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local --protocol $proto --destination-port $dport -j MARK --set-mark 0x539$intfid
|
-A omr-bypass-local --protocol $proto --destination-port $dport -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539$intfid
|
-A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -296,36 +312,36 @@ _bypass_src_port() {
|
||||||
sport="$(echo $sport | sed 's/-/:/')"
|
sport="$(echo $sport | sed 's/-/:/')"
|
||||||
[ -z "$proto" ] && return
|
[ -z "$proto" ] && return
|
||||||
if [ "$intf" = "all" ]; then
|
if [ "$intf" = "all" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass --protocol $proto --source-port $sport -j MARK --set-mark 0x539
|
-A omr-bypass --protocol $proto --source-port $sport -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local --protocol $proto --source-port $sport -j MARK --set-mark 0x539
|
-A omr-bypass-local --protocol $proto --source-port $sport -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 --protocol $proto --source-port $sport -j MARK --set-mark 0x6539
|
-A omr-bypass6 --protocol $proto --source-port $sport -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass --protocol $proto --source-port $sport -j MARK --set-mark 0x539$intfid
|
-A omr-bypass --protocol $proto --source-port $sport -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local --protocol $proto --source-port $sport -j MARK --set-mark 0x539$intfid
|
-A omr-bypass-local --protocol $proto --source-port $sport -j MARK --set-mark 0x539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 --protocol $proto --source-port $sport -j MARK --set-mark 0x6539$intfid
|
-A omr-bypass6 --protocol $proto --source-port $sport -j MARK --set-mark 0x6539$intfid
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -351,14 +367,14 @@ _bypass_proto() {
|
||||||
[ -z "$proto" ] && return
|
[ -z "$proto" ] && return
|
||||||
if [ "$(uci -q get openmptcprouter.settings.ndpi)" != "0" ] && [ "$ndpi" != "0" ]; then
|
if [ "$(uci -q get openmptcprouter.settings.ndpi)" != "0" ] && [ "$ndpi" != "0" ]; then
|
||||||
if [ "$intf" = "all" ]; then
|
if [ "$intf" = "all" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539
|
-A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539
|
||||||
-A omr-bypass-dpi -m mark --mark 0x539 -j RETURN
|
-A omr-bypass-dpi -m mark --mark 0x539 -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539
|
-A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539
|
||||||
-A omr-bypass6-dpi -m mark --mark 0x6539 -j RETURN
|
-A omr-bypass6-dpi -m mark --mark 0x6539 -j RETURN
|
||||||
|
@ -366,14 +382,14 @@ _bypass_proto() {
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539$intfid
|
-A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539$intfid
|
||||||
-A omr-bypass-dpi -m mark --mark 0x539$intfid -j RETURN
|
-A omr-bypass-dpi -m mark --mark 0x539$intfid -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539$intfid
|
-A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539$intfid
|
||||||
-A omr-bypass6-dpi -m mark --mark 0x6539$intfid -j RETURN
|
-A omr-bypass6-dpi -m mark --mark 0x6539$intfid -j RETURN
|
||||||
|
@ -425,24 +441,24 @@ _bypass_proto() {
|
||||||
_intf_rule_ss_rules() {
|
_intf_rule_ss_rules() {
|
||||||
rule_name=$1
|
rule_name=$1
|
||||||
[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_dst)" != "" ] && [ "$(iptables-save | grep ssr_${rule_name}_dst | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep ssr_${rule_name}_dst)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep ssr_${rule_name}_dst | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I ssr_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN
|
-I ssr_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_local_out)" != "" ] && [ "$(iptables-save | grep ssr_${rule_name}_local_out | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep ssr_${rule_name}_local_out)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep ssr_${rule_name}_local_out | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I ssr_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I ssr_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I ssr_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN
|
-I ssr_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables-save | grep ssr_${rule_name}_pre_src | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep ssr_${rule_name}_pre_src | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I ssr_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I ssr_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I ssr_${rule_name}_pre_src 2 -m mark --mark 0x539$count -j RETURN
|
-I ssr_${rule_name}_pre_src 2 -m mark --mark 0x539$count -j RETURN
|
||||||
|
@ -450,15 +466,15 @@ _intf_rule_ss_rules() {
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep omr6_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t mangle -L -n | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables-save | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$($IP6TABLESSAVE 2>/dev/null | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||||
-I ssr6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN
|
-I ssr6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN
|
||||||
|
@ -476,24 +492,24 @@ _intf_rule_v2ray_rules() {
|
||||||
#rule_name=$1
|
#rule_name=$1
|
||||||
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||||
rule_name="def"
|
rule_name="def"
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_dst)" != "" ] && [ "$(iptables-save | grep v2r_${rule_name}_dst | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep v2r_${rule_name}_dst)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep v2r_${rule_name}_dst | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I v2r_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN
|
-I v2r_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_local_out)" != "" ] && [ "$(iptables-save | grep v2r_${rule_name}_local_out | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep v2r_${rule_name}_local_out)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep v2r_${rule_name}_local_out | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I v2r_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I v2r_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I v2r_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN
|
-I v2r_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables-save | grep v2r_${rule_name}_pre_src | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$($IPTABLESSAVE 2</dev/null | grep v2r_${rule_name}_pre_src | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I v2r_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I v2r_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I v2r_${rule_name}_pre_src 2 -m mark --mark 0x539$count -j RETURN
|
-I v2r_${rule_name}_pre_src 2 -m mark --mark 0x539$count -j RETURN
|
||||||
|
@ -503,15 +519,15 @@ _intf_rule_v2ray_rules() {
|
||||||
|
|
||||||
|
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
if [ "$(ip6tables-save | grep omr-bypass6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IP6TABLESSAVE | grep omr-bypass6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables-save | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$($IP6TABLESSAVE 2>/dev/null | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||||
-I v2r6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN
|
-I v2r6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN
|
||||||
|
@ -567,8 +583,8 @@ _intf_rule() {
|
||||||
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 pref 1 > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$($IPTABLESSAVE 2>/dev/null | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-I omr-bypass 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
-I omr-bypass 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||||
-I omr-bypass 2 -m mark --mark 0x539$count -j RETURN
|
-I omr-bypass 2 -m mark --mark 0x539$count -j RETURN
|
||||||
|
@ -627,8 +643,8 @@ _bypass_omr_server() {
|
||||||
_ss_rules_config() {
|
_ss_rules_config() {
|
||||||
rule_name=$1
|
rule_name=$1
|
||||||
[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$($IPTABLES --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
-I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
-I ssr_${rule_name}_dst 2 -m mark --mark 0x539 -j RETURN
|
-I ssr_${rule_name}_dst 2 -m mark --mark 0x539 -j RETURN
|
||||||
|
@ -640,15 +656,15 @@ _ss_rules_config() {
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
-A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$($IP6TABLES --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||||
-I ssr6_${rule_name}_dst 1 -m mark --mark 0x6539 -j RETURN
|
-I ssr6_${rule_name}_dst 1 -m mark --mark 0x6539 -j RETURN
|
||||||
|
@ -666,8 +682,8 @@ _v2ray_rules_config() {
|
||||||
#rule_name=$1
|
#rule_name=$1
|
||||||
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||||
rule_name="def"
|
rule_name="def"
|
||||||
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$($IPTABLES --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
-I v2r_${rule_name}_dst 2 -m mark --mark 0x539 -j RETURN
|
-I v2r_${rule_name}_dst 2 -m mark --mark 0x539 -j RETURN
|
||||||
|
@ -679,15 +695,15 @@ _v2ray_rules_config() {
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
-A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then
|
if [ "$($IP6TABLES --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$($IP6TABLES --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||||
-I v2r6_${rule_name}_dst 1 -m mark --mark 0x6539 -j RETURN
|
-I v2r6_${rule_name}_dst 1 -m mark --mark 0x6539 -j RETURN
|
||||||
|
@ -725,22 +741,22 @@ start_service() {
|
||||||
create omr6_dst_bypass_all hash:net family inet6 hashsize 64
|
create omr6_dst_bypass_all hash:net family inet6 hashsize 64
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
iptables-save --counters | grep -v omr-bypass | iptables-restore -w --counters
|
$IPTABLESSAVE --counters 2>/dev/null | grep -v omr-bypass | $IPTABLESRESTORE -w --counters 2>/dev/null
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
:omr-bypass -
|
:omr-bypass -
|
||||||
-A PREROUTING -j omr-bypass
|
-A PREROUTING -j omr-bypass
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
:omr-bypass-local -
|
:omr-bypass-local -
|
||||||
-A OUTPUT -m addrtype ! --dst-type LOCAL -j omr-bypass-local
|
-A OUTPUT -m addrtype ! --dst-type LOCAL -j omr-bypass-local
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore -w --counters
|
$IP6TABLESSAVE --counters 2>/dev/null | grep -v omr-bypass6 | $IP6TABLESRESTORE -w --counters 2>/dev/null
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
:omr-bypass6 -
|
:omr-bypass6 -
|
||||||
-A PREROUTING -j omr-bypass6
|
-A PREROUTING -j omr-bypass6
|
||||||
|
@ -786,14 +802,14 @@ start_service() {
|
||||||
ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1
|
ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1
|
||||||
ip -6 rule add prio 1 fwmark 0x6539 lookup 6991337 > /dev/null 2>&1
|
ip -6 rule add prio 1 fwmark 0x6539 lookup 6991337 > /dev/null 2>&1
|
||||||
|
|
||||||
if [ "$(iptables --wait=40 -t mangle -L -n | grep 'match-set omr_dst_bypass_all dst MARK set')" = "" ]; then
|
if [ "$($IPTABLES --wait=40 -t mangle -L -n | grep 'match-set omr_dst_bypass_all dst MARK set')" = "" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
-A omr-bypass -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
-A omr-bypass -m mark --mark 0x539 -j RETURN
|
-A omr-bypass -m mark --mark 0x539 -j RETURN
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-bypass-local -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
-A omr-bypass-local -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
-A omr-bypass-local -m mark --mark 0x539 -j RETURN
|
-A omr-bypass-local -m mark --mark 0x539 -j RETURN
|
||||||
|
@ -805,8 +821,8 @@ start_service() {
|
||||||
config_foreach _ss_rules_config
|
config_foreach _ss_rules_config
|
||||||
_v2ray_rules_config
|
_v2ray_rules_config
|
||||||
|
|
||||||
iptables-save --counters | grep -v omr-bypass-dpi | iptables-restore -w --counters
|
$IPTABLESSAVE --counters 2>/dev/null | grep -v omr-bypass-dpi | $IPTABLESRESTORE -w --counters 2>/dev/null
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
:omr-bypass-dpi -
|
:omr-bypass-dpi -
|
||||||
-A INPUT -j omr-bypass-dpi
|
-A INPUT -j omr-bypass-dpi
|
||||||
|
@ -814,8 +830,8 @@ start_service() {
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
if [ "$disableipv6" = "0" ]; then
|
if [ "$disableipv6" = "0" ]; then
|
||||||
ip6tables-save --counters | grep -v omr-bypass6-dpi | ip6tables-restore -w --counters
|
$IP6TABLESSAVE --counters | grep -v omr-bypass6-dpi | $IP6TABLESRESTORE -w --counters 2>/dev/null
|
||||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
$IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
:omr-bypass6-dpi -
|
:omr-bypass6-dpi -
|
||||||
-A INPUT -j omr-bypass6-dpi
|
-A INPUT -j omr-bypass6-dpi
|
||||||
|
@ -839,10 +855,10 @@ start_service() {
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_service() {
|
stop_service() {
|
||||||
iptables-save --counters | grep -v omr-bypass | iptables-restore -w --counters
|
$IPTABLESSAVE --counters 2>/dev/null | grep -v omr-bypass | $IPTABLESRESTORE -w --counters 2>/dev/null
|
||||||
iptables-save --counters | grep -v omr_dst | iptables-restore -w --counters
|
$IPTABLESSAVE --counters 2>/dev/null | grep -v omr_dst | $IPTABLESRESTORE -w --counters 2>/dev/null
|
||||||
ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore -w --counters
|
$IP6TABLESSAVE --counters 2>/dev/null | grep -v omr-bypass6 | $IP6TABLESRESTORE -w --counters 2>/dev/null
|
||||||
ip6tables-save --counters | grep -v omr6_dst | ip6tables-restore -w --counters
|
$IP6TABLESSAVE --counters 2>/dev/null | grep -v omr6_dst | $IP6TABLESRESTORE -w --counters 2>/dev/null
|
||||||
for setname in $(ipset -n list | grep "omr_"); do
|
for setname in $(ipset -n list | grep "omr_"); do
|
||||||
ipset -q destroy "$setname" 2>/dev/null || true
|
ipset -q destroy "$setname" 2>/dev/null || true
|
||||||
done
|
done
|
||||||
|
@ -853,6 +869,7 @@ service_triggers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_service() {
|
reload_service() {
|
||||||
|
RELOAD=1
|
||||||
start
|
start
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ _ipt4() {
|
||||||
iptables -w -t mangle "$@" 2>&1 >/dev/null
|
iptables -w -t mangle "$@" 2>&1 >/dev/null
|
||||||
}
|
}
|
||||||
_ipt6() {
|
_ipt6() {
|
||||||
ip6tables -w -t mangle "$@" >/dev/null
|
ip6tables -w -t mangle "$@" 2>&1 >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
_add_dscp_rule() {
|
_add_dscp_rule() {
|
||||||
|
|
|
@ -634,6 +634,8 @@ function wizard_add()
|
||||||
ucic:set("unbound","ub_main","dns64","0")
|
ucic:set("unbound","ub_main","dns64","0")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
ucic:save("unbound")
|
||||||
|
ucic:commit("unbound")
|
||||||
|
|
||||||
-- Get Proxy set by default
|
-- Get Proxy set by default
|
||||||
local default_proxy = luci.http.formvalue("default_proxy") or "shadowsocks"
|
local default_proxy = luci.http.formvalue("default_proxy") or "shadowsocks"
|
||||||
|
@ -981,7 +983,7 @@ function wizard_add()
|
||||||
ucic:set("openvpn","omr","enabled",1)
|
ucic:set("openvpn","omr","enabled",1)
|
||||||
ucic:set("network","omrvpn","proto","none")
|
ucic:set("network","omrvpn","proto","none")
|
||||||
else
|
else
|
||||||
ucic:set("openvpn","omr","enabled",0)
|
ucic:delete("openvpn","omr","enabled")
|
||||||
end
|
end
|
||||||
ucic:save("openvpn")
|
ucic:save("openvpn")
|
||||||
ucic:commit("openvpn")
|
ucic:commit("openvpn")
|
||||||
|
@ -1156,8 +1158,10 @@ function settings_add()
|
||||||
ucic:set("openmptcprouter","settings","shadowsocksudp",shadowsocksudp)
|
ucic:set("openmptcprouter","settings","shadowsocksudp",shadowsocksudp)
|
||||||
|
|
||||||
-- Enable/disable v2ray udp
|
-- Enable/disable v2ray udp
|
||||||
local shadowsocksudp = luci.http.formvalue("v2rayudp") or "1"
|
local v2rayudp = luci.http.formvalue("v2rayudp") or "0"
|
||||||
ucic:set("v2ray","main_transparent_proxy","redirect_udp",v2rayudp)
|
ucic:set("v2ray","main_transparent_proxy","redirect_udp",v2rayudp)
|
||||||
|
ucic:save("v2ray")
|
||||||
|
ucic:commit("v2ray")
|
||||||
|
|
||||||
-- Enable/disable nDPI
|
-- Enable/disable nDPI
|
||||||
local ndpi = luci.http.formvalue("ndpi") or "1"
|
local ndpi = luci.http.formvalue("ndpi") or "1"
|
||||||
|
@ -1233,16 +1237,6 @@ function settings_add()
|
||||||
-- Enable/disable SIP ALG
|
-- Enable/disable SIP ALG
|
||||||
local sipalg = luci.http.formvalue("sipalg") or "0"
|
local sipalg = luci.http.formvalue("sipalg") or "0"
|
||||||
ucic:set("openmptcprouter","settings","sipalg",sipalg)
|
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 -q nf_conntrack_sip >/dev/null 2>/dev/null")
|
|
||||||
luci.sys.call("modprobe -q 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_sip >/dev/null 2>/dev/null")
|
|
||||||
end
|
|
||||||
|
|
||||||
ucic:save("openmptcprouter")
|
ucic:save("openmptcprouter")
|
||||||
ucic:commit("openmptcprouter")
|
ucic:commit("openmptcprouter")
|
||||||
|
|
|
@ -381,7 +381,7 @@
|
||||||
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("openmptcprouter","settings","vpn") == "mlvpn" then %>selected="selected"<% end %>>MLVPN</option><% end %>
|
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("openmptcprouter","settings","vpn") == "mlvpn" then %>selected="selected"<% end %>>MLVPN</option><% end %>
|
||||||
<% if nixio.fs.access("/usr/sbin/ubond") then %><option value="ubond" <% if uci:get("openmptcprouter","settings","vpn") == "ubond" then %>selected="selected"<% end %>>UBOND</option><% end %>
|
<% if nixio.fs.access("/usr/sbin/ubond") then %><option value="ubond" <% if uci:get("openmptcprouter","settings","vpn") == "ubond" then %>selected="selected"<% end %>>UBOND</option><% end %>
|
||||||
<% if nixio.fs.access("/etc/init.d/openvpn") then %><option value="openvpn" <% if uci:get("openmptcprouter","settings","vpn") == "openvpn" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
|
<% if nixio.fs.access("/etc/init.d/openvpn") then %><option value="openvpn" <% if uci:get("openmptcprouter","settings","vpn") == "openvpn" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
|
||||||
<% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><option value="openvpn_bonding" <% if uci:get("openmptcprouter","settings","vpn") == "openvpn_bonding" then %>selected="selected"<% end %>>OpenVPN Bonding</option><% end %>
|
<!-- <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><option value="openvpn_bonding" <% if uci:get("openmptcprouter","settings","vpn") == "openvpn_bonding" then %>selected="selected"<% end %>>OpenVPN Bonding</option><% end %> -->
|
||||||
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
|
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
|
||||||
<%
|
<%
|
||||||
end
|
end
|
||||||
|
@ -535,7 +535,7 @@
|
||||||
<hr />
|
<hr />
|
||||||
<fieldset class="cbi-section" id="interfaces">
|
<fieldset class="cbi-section" id="interfaces">
|
||||||
<legend><%:Interfaces settings%></legend>
|
<legend><%:Interfaces settings%></legend>
|
||||||
<div class="cbi-section-descr"><%:You must disable DHCP on your modems and set IP in different networks.%></div>
|
<!-- <div class="cbi-section-descr"><%:You must disable DHCP on your modems and set IP in different networks.%></div> -->
|
||||||
<%
|
<%
|
||||||
for _, iface in ipairs(net:get_networks()) do
|
for _, iface in ipairs(net:get_networks()) do
|
||||||
local ifname = iface:name()
|
local ifname = iface:name()
|
||||||
|
@ -944,7 +944,7 @@
|
||||||
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.<%=ifname%>.enabled" id="cbid.sqm.<%=ifname%>.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == "1" then %>checked<% end %> />
|
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.<%=ifname%>.enabled" id="cbid.sqm.<%=ifname%>.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == "1" then %>checked<% end %> />
|
||||||
<br />
|
<br />
|
||||||
<div class="cbi-value-description">
|
<div class="cbi-value-description">
|
||||||
<%:SQM control bufferloat: the undesirable latency that arises when the router buffers too much data.%>
|
<%:SQM control bufferbloat: the undesirable latency that arises when the router buffers too much data.%>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -955,6 +955,7 @@
|
||||||
<br />
|
<br />
|
||||||
<div class="cbi-value-description">
|
<div class="cbi-value-description">
|
||||||
<%:SQM autorate is for LTE and connection without a stable speed.%>
|
<%:SQM autorate is for LTE and connection without a stable speed.%>
|
||||||
|
<%:Download and upload speed MUST be set to make this work.%>
|
||||||
<%
|
<%
|
||||||
if cake ~= "cake" then
|
if cake ~= "cake" then
|
||||||
%>
|
%>
|
||||||
|
|
|
@ -181,6 +181,28 @@ start_service() {
|
||||||
rmmod fast_classifier 2>&1 >/dev/null
|
rmmod fast_classifier 2>&1 >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$(uci -q get openmptcprouter.settings.sipalg)" = "0" ]; then
|
||||||
|
uci -q batch <<-EOF >/dev/null
|
||||||
|
set firewall.zone_lan.auto_helper='0'
|
||||||
|
set firewall.zone_wan.auto_helper='0'
|
||||||
|
set firewall.zone_vpn.auto_helper='0'
|
||||||
|
commit firewall
|
||||||
|
EOF
|
||||||
|
rmmod nf_nat_sip 2>&1 >/dev/null
|
||||||
|
sleep 2
|
||||||
|
rmmod nf_conntrack_sip 2>&1 >/dev/null
|
||||||
|
else
|
||||||
|
uci -q batch <<-EOF >/dev/null
|
||||||
|
set firewall.zone_lan.auto_helper='1'
|
||||||
|
set firewall.zone_wan.auto_helper='1'
|
||||||
|
set firewall.zone_vpn.auto_helper='1'
|
||||||
|
commit firewall
|
||||||
|
EOF
|
||||||
|
modprobe -q nf_conntrack_sip 2>&1 >/dev/null
|
||||||
|
sleep 2
|
||||||
|
modprobe -q nf_nat_sip 2>&1 >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$(uci -q get rpcd.@rpcd[0].socket)" != "/var/run/ubus/ubus.sock" ]; then
|
if [ "$(uci -q get rpcd.@rpcd[0].socket)" != "/var/run/ubus/ubus.sock" ]; then
|
||||||
uci -q batch <<-EOF >/dev/null
|
uci -q batch <<-EOF >/dev/null
|
||||||
set rpcd.@rpcd[0].socket='/var/run/ubus/ubus.sock'
|
set rpcd.@rpcd[0].socket='/var/run/ubus/ubus.sock'
|
||||||
|
|
|
@ -895,7 +895,7 @@ function interfaces_status()
|
||||||
mArray.openmptcprouter["vps_status"] = "UP"
|
mArray.openmptcprouter["vps_status"] = "UP"
|
||||||
mArray.openmptcprouter["vps_admin_error_msg"] = ""
|
mArray.openmptcprouter["vps_admin_error_msg"] = ""
|
||||||
else
|
else
|
||||||
uci:set("openmptcprouter",s[".name"],"admin_error","1")
|
uci:set("openmptcprouter",s[".name"],"token_error","1")
|
||||||
mArray.openmptcprouter["vps_admin_error"] = true
|
mArray.openmptcprouter["vps_admin_error"] = true
|
||||||
uci:delete("openmptcprouter",s[".name"],"token")
|
uci:delete("openmptcprouter",s[".name"],"token")
|
||||||
uci:save("openmptcprouter",s[".name"])
|
uci:save("openmptcprouter",s[".name"])
|
||||||
|
@ -931,7 +931,7 @@ function interfaces_status()
|
||||||
else
|
else
|
||||||
mArray.openmptcprouter["vps_admin"] = false
|
mArray.openmptcprouter["vps_admin"] = false
|
||||||
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
|
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
|
||||||
uci:set("openmptcprouter",s[".name"],"admin_error","1")
|
uci:set("openmptcprouter",s[".name"],"token_error","1")
|
||||||
mArray.openmptcprouter["vps_admin_error"] = true
|
mArray.openmptcprouter["vps_admin_error"] = true
|
||||||
uci:delete("openmptcprouter",s[".name"],"token")
|
uci:delete("openmptcprouter",s[".name"],"token")
|
||||||
uci:save("openmptcprouter",s[".name"])
|
uci:save("openmptcprouter",s[".name"])
|
||||||
|
@ -1074,8 +1074,10 @@ function interfaces_status()
|
||||||
mArray.openmptcprouter.dhcpd[itf].range_end = range_end
|
mArray.openmptcprouter.dhcpd[itf].range_end = range_end
|
||||||
mArray.openmptcprouter.dhcpd[itf].netmask = mask
|
mArray.openmptcprouter.dhcpd[itf].netmask = mask
|
||||||
mArray.openmptcprouter.dhcpd[itf].leasetime = leasetime
|
mArray.openmptcprouter.dhcpd[itf].leasetime = leasetime
|
||||||
mArray.openmptcprouter.dhcpd[itf].router = mArray.openmptcprouter["local_addr"]
|
local net = ntm:get_network(itf)
|
||||||
mArray.openmptcprouter.dhcpd[itf].dns = mArray.openmptcprouter["local_addr"]
|
local ipaddr = net:ipaddr() or ""
|
||||||
|
mArray.openmptcprouter.dhcpd[itf].router = ipaddr
|
||||||
|
mArray.openmptcprouter.dhcpd[itf].dns = ipaddr
|
||||||
end
|
end
|
||||||
for itf, option, value in dnsmasq:gmatch("option=(%w+),([%w:-]+),(%d+\.%d+\.%d+\.%d+)") do
|
for itf, option, value in dnsmasq:gmatch("option=(%w+),([%w:-]+),(%d+\.%d+\.%d+\.%d+)") do
|
||||||
if mArray.openmptcprouter.dhcpd[itf] then
|
if mArray.openmptcprouter.dhcpd[itf] then
|
||||||
|
|
|
@ -21,6 +21,15 @@ _launch_autorate() {
|
||||||
config_get autorate "$1" autorate
|
config_get autorate "$1" autorate
|
||||||
[ "${autorate}" != "1" ] && return
|
[ "${autorate}" != "1" ] && return
|
||||||
|
|
||||||
|
config_get min_download "$1" min_download
|
||||||
|
config_get download "$1" download
|
||||||
|
config_get max_download "$1" max_download
|
||||||
|
[ "${min_download}" == "0" ] || [ "${max_download}" == "0" ] || [ "${download}" == "0" ] && return
|
||||||
|
config_get min_upload "$1" min_upload
|
||||||
|
config_get upload "$1" upload
|
||||||
|
config_get max_upload "$1" max_upload
|
||||||
|
[ "${min_upload}" == "0" ] || [ "${max_upload}" == "0" ] || [ "${upload}" == "0" ] && return
|
||||||
|
|
||||||
procd_open_instance
|
procd_open_instance
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
procd_set_param command /usr/share/sqm-autorate/CAKE-autorate.sh "$1"
|
procd_set_param command /usr/share/sqm-autorate/CAKE-autorate.sh "$1"
|
||||||
|
|
|
@ -159,7 +159,7 @@ function set_status(type, message, loading, show_log) {
|
||||||
|
|
||||||
function upgrade_check() {
|
function upgrade_check() {
|
||||||
var current_version = data.release.version.toLowerCase();
|
var current_version = data.release.version.toLowerCase();
|
||||||
var current_branch = current_version.split('.').slice(0, 2).join('.')
|
var current_branch = current_version.split('-')[0].split('.').slice(0, 2).join('.')
|
||||||
var candidates = []
|
var candidates = []
|
||||||
hide("#status_box");
|
hide("#status_box");
|
||||||
hide("#server_div");
|
hide("#server_div");
|
||||||
|
|
|
@ -519,6 +519,14 @@ return view.extend({
|
||||||
so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4);
|
so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
so = ss.option(form.value, 'gw', _('Gateway IPv4 Address'));
|
||||||
|
so.rmempty = true;
|
||||||
|
so.datatype = 'or(ip4addr,"ignore")';
|
||||||
|
Object.keys(hosts).forEach(function(mac) {
|
||||||
|
if (hosts[mac].ipv4)
|
||||||
|
so.value(hosts[mac].ipv4);
|
||||||
|
});
|
||||||
|
|
||||||
so = ss.option(form.Value, 'leasetime', _('Lease time'));
|
so = ss.option(form.Value, 'leasetime', _('Lease time'));
|
||||||
so.rmempty = true;
|
so.rmempty = true;
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=modemmanager
|
PKG_NAME:=modemmanager
|
||||||
PKG_VERSION:=1.18.6
|
PKG_VERSION:=1.18.12
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=ModemManager-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=ModemManager-$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=https://www.freedesktop.org/software/ModemManager
|
PKG_SOURCE_URL:=https://www.freedesktop.org/software/ModemManager
|
||||||
PKG_HASH:=d4f804b31cf504239c5f1d4973c62095c00cba1ee9abb503718dac6d146a470a
|
PKG_HASH:=b464e4925d955a6ca86dd08616e763b26ae46d7fd37dbe281678e34065b1e430
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/ModemManager-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/ModemManager-$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_MAINTAINER:=Nicholas Smith <nicholas.smith@telcoantennas.com.au>
|
PKG_MAINTAINER:=Nicholas Smith <nicholas.smith@telcoantennas.com.au>
|
||||||
|
|
|
@ -7,7 +7,7 @@ if [ "$(uci -q get network.globals.mptcp_path_manager)" = "" ]; then
|
||||||
set network.globals.congestion='cubic'
|
set network.globals.congestion='cubic'
|
||||||
set network.globals.mptcp_checksum=0
|
set network.globals.mptcp_checksum=0
|
||||||
set network.globals.mptcp_debug=0
|
set network.globals.mptcp_debug=0
|
||||||
set network.globals.mptcp_syn_retries=2
|
set network.globals.mptcp_syn_retries=4
|
||||||
set network.globals.mptcp_subflows=3
|
set network.globals.mptcp_subflows=3
|
||||||
set network.globals.mptcp_add_addr_accepted=1
|
set network.globals.mptcp_add_addr_accepted=1
|
||||||
set network.globals.mptcp_add_addr_timeout=120
|
set network.globals.mptcp_add_addr_timeout=120
|
||||||
|
|
|
@ -143,16 +143,22 @@ else
|
||||||
exit 0;;
|
exit 0;;
|
||||||
"on")
|
"on")
|
||||||
[ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null
|
[ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null
|
||||||
ip mptcp endpoint add $IP dev $DEVICE subflow fullmesh
|
for i in $IP; do
|
||||||
|
ip mptcp endpoint add $i dev $DEVICE subflow fullmesh
|
||||||
|
done
|
||||||
exit 0;;
|
exit 0;;
|
||||||
"signal")
|
"signal")
|
||||||
[ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null
|
[ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null
|
||||||
#ip mptcp endpoint add $IP dev $DEVICE signal subflow fullmesh
|
for i in $IP; do
|
||||||
ip mptcp endpoint add $IP dev $DEVICE signal
|
#ip mptcp endpoint add $i dev $DEVICE signal subflow fullmesh
|
||||||
|
ip mptcp endpoint add $i dev $DEVICE signal
|
||||||
|
done
|
||||||
exit 0;;
|
exit 0;;
|
||||||
"backup")
|
"backup")
|
||||||
[ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null
|
[ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null
|
||||||
ip mptcp endpoint add $IP dev $DEVICE backup fullmesh
|
for i in $IP; do
|
||||||
|
ip mptcp endpoint add $i dev $DEVICE backup fullmesh
|
||||||
|
done
|
||||||
exit 0;;
|
exit 0;;
|
||||||
"")
|
"")
|
||||||
case "$IFF" in
|
case "$IFF" in
|
||||||
|
|
|
@ -860,6 +860,20 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
|
||||||
config_foreach del_server_route server
|
config_foreach del_server_route server
|
||||||
config_foreach del_server_route6 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" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then
|
||||||
|
|
||||||
|
if [ -n "$OMR_TRACKER_INTERFACE" ]; then
|
||||||
|
if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then
|
||||||
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )"
|
||||||
|
config_load network
|
||||||
|
config_foreach set_route interface $OMR_TRACKER_INTERFACE
|
||||||
|
config_foreach set_route6 interface $OMR_TRACKER_INTERFACE
|
||||||
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New routes $(ip r)"
|
||||||
|
elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" = "master" ]; then
|
||||||
|
config_load network
|
||||||
|
config_foreach set_route interface $OMR_TRACKER_INTERFACE "no"
|
||||||
|
config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then
|
if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then
|
||||||
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route (current: $(ip r) )"
|
[ "$(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_routes server
|
||||||
|
@ -867,20 +881,6 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
|
||||||
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route done (new: $(ip r) )"
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route done (new: $(ip r) )"
|
||||||
fi
|
fi
|
||||||
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=""
|
mail_alert=""
|
||||||
if [ -n "$OMR_TRACKER_INTERFACE" ]; then
|
if [ -n "$OMR_TRACKER_INTERFACE" ]; then
|
||||||
|
@ -966,7 +966,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
|
||||||
if [ -n "$OMR_TRACKER_INTERFACE" ]; then
|
if [ -n "$OMR_TRACKER_INTERFACE" ]; then
|
||||||
uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc
|
uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc
|
||||||
fi
|
fi
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
#ubus call network reload
|
#ubus call network reload
|
||||||
|
|
||||||
# Set a little sleep after an interface error
|
# Set a little sleep after an interface error
|
||||||
|
@ -992,8 +992,8 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om
|
||||||
_log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE"
|
_log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE"
|
||||||
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw : $default_gw - Current route: $(ip r)"
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw : $default_gw - Current route: $(ip r)"
|
||||||
ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null
|
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
|
if [ "$(pgrep -f openmptcprouter-vps)" = "" ]; then
|
||||||
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
|
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 &
|
||||||
fi
|
fi
|
||||||
[ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp 2>&1 >/dev/null
|
[ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp 2>&1 >/dev/null
|
||||||
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)"
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)"
|
||||||
|
@ -1038,7 +1038,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om
|
||||||
else
|
else
|
||||||
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
||||||
fi
|
fi
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
fi
|
fi
|
||||||
nbserver=0
|
nbserver=0
|
||||||
piholeenabled=0
|
piholeenabled=0
|
||||||
|
@ -1053,7 +1053,7 @@ fi
|
||||||
if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then
|
if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then
|
||||||
if [ "$(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 set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
@ -1172,7 +1172,7 @@ if [ "$multipath_config" = "master" ]; then
|
||||||
ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 2>&1 >/dev/null
|
ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 2>&1 >/dev/null
|
||||||
fi
|
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 ([ -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
|
||||||
[ "$(pgrep openmptcprouter-vps)" = "" ] && /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
|
[ "$(pgrep -f openmptcprouter-vps)" = "" ] && /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 &
|
||||||
fi
|
fi
|
||||||
multipath_config="on"
|
multipath_config="on"
|
||||||
fi
|
fi
|
||||||
|
@ -1217,8 +1217,8 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul
|
||||||
addpath() {
|
addpath() {
|
||||||
serverip=$1
|
serverip=$1
|
||||||
#gtudpst="up"
|
#gtudpst="up"
|
||||||
#[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && gtudpst="backup"
|
#[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep -f 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 -t 5 $serverip)" ]; then
|
if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP | grep running)" = "" ] && [ -n "$(resolveip -4 -t 5 $serverip)" ]; then
|
||||||
serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
|
serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
|
||||||
if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then
|
if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then
|
||||||
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
|
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
|
||||||
|
@ -1234,7 +1234,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul
|
||||||
fi
|
fi
|
||||||
fi
|
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 -t 5 $serverip)" ]; then
|
if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6 | grep running)" = "" ] && [ -n "$(resolveip -6 -t 5 $serverip)" ]; then
|
||||||
serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
|
serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
|
||||||
if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then
|
if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then
|
||||||
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
|
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
|
||||||
|
@ -1250,10 +1250,10 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then
|
# if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then
|
||||||
# glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1
|
# glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1
|
||||||
# fi
|
# fi
|
||||||
[ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && {
|
[ "$multipath_config" = "backup" ] && [ "$(pgrep -f glorytun-udp)" != "" ] && {
|
||||||
[ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$(resolveip -4 -t 5 $serverip)" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set pref 125 > /dev/null 2>&1
|
[ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$(resolveip -4 -t 5 $serverip)" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set pref 125 > /dev/null 2>&1
|
||||||
[ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$(resolveip -6 -t 5 $serverip)" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set pref 125 > /dev/null 2>&1
|
[ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$(resolveip -6 -t 5 $serverip)" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set pref 125 > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
@ -1322,7 +1322,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC
|
||||||
local latestversions="$(curl -4 -s -m 3 https://55860.com/bak/version.json)"
|
local latestversions="$(curl -4 -s -m 3 https://55860.com/bak/version.json)"
|
||||||
[ -n "$latestversions" ] && {
|
[ -n "$latestversions" ] && {
|
||||||
uci -q set openmptcprouter.latest_versions=latest_versions
|
uci -q set openmptcprouter.latest_versions=latest_versions
|
||||||
uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr')
|
uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr')-$(ubus call system board | jsonfilter -e '@.kernel' | cut -d'.' -f1,2)
|
||||||
uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps')
|
uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps')
|
||||||
uci -q set openmptcprouter.latest_versions.lc=$(date +"%s")
|
uci -q set openmptcprouter.latest_versions.lc=$(date +"%s")
|
||||||
}
|
}
|
||||||
|
@ -1375,7 +1375,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC
|
||||||
omr_tracebox_mtu() {
|
omr_tracebox_mtu() {
|
||||||
local serverip=$1
|
local serverip=$1
|
||||||
[ "$serverip" != "${1#*[0-9].[0-9]}" ] && serverip=""
|
[ "$serverip" != "${1#*[0-9].[0-9]}" ] && serverip=""
|
||||||
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
|
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
|
||||||
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
||||||
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
|
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
|
||||||
}
|
}
|
||||||
|
@ -1450,7 +1450,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC
|
||||||
omr_tracebox_mtu() {
|
omr_tracebox_mtu() {
|
||||||
local serverip=$1
|
local serverip=$1
|
||||||
[ "$serverip" != "${1#*:[0-9a-fA-F]}" ] && serverip=""
|
[ "$serverip" != "${1#*:[0-9a-fA-F]}" ] && serverip=""
|
||||||
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
|
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
|
||||||
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
||||||
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
|
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
|
||||||
}
|
}
|
||||||
|
@ -1517,10 +1517,10 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC
|
||||||
uci -q commit openmptcprouter
|
uci -q commit openmptcprouter
|
||||||
else
|
else
|
||||||
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Done"
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Done"
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
if [ "$(pgrep openmptcprouter-vps)" = "" ] && ( [ "$(uci -q get openmptcprouter.settings.apilc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.settings.apilc))) -gt 3600 ] ); then
|
if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && ( [ "$(uci -q get openmptcprouter.settings.apilc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.settings.apilc))) -gt 3600 ] ); then
|
||||||
_log "Check API configuration..."
|
_log "Check API configuration..."
|
||||||
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
|
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 &
|
||||||
uci -q set openmptcprouter.settings.apilc=$(date +"%s")
|
uci -q set openmptcprouter.settings.apilc=$(date +"%s")
|
||||||
_log "Check API configuration... Done"
|
_log "Check API configuration... Done"
|
||||||
fi
|
fi
|
||||||
|
@ -1553,8 +1553,8 @@ fi
|
||||||
uci -q set openmptcprouter.settings.master="change"
|
uci -q set openmptcprouter.settings.master="change"
|
||||||
fi
|
fi
|
||||||
if [ "$(uci -q get openmptcprouter.settings.master)" != "dynamic" ]; then
|
if [ "$(uci -q get openmptcprouter.settings.master)" != "dynamic" ]; then
|
||||||
uci -q commit network
|
[ -n "$(uci -q changes network)" ] && uci -q commit network
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
fi
|
fi
|
||||||
_log "Change master interface from $masterintf ($masterlatency ms) to $OMR_TRACKER_INTERFACE ($OMR_TRACKER_LATENCY ms)"
|
_log "Change master interface from $masterintf ($masterlatency ms) to $OMR_TRACKER_INTERFACE ($OMR_TRACKER_LATENCY ms)"
|
||||||
fi
|
fi
|
||||||
|
@ -1578,7 +1578,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If a service is down, force restart it
|
# If a service is down, force restart it
|
||||||
if [ -f /etc/init.d/shadowsocks-libev ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(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 [ -f /etc/init.d/shadowsocks-libev ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(pgrep -f ss-redir)" = "" ] && [ "$(pgrep -f ss-local)" = "" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.server)" != "" ] && [ "$(uci -q get shadowsocks-libev.sss0.server)" != "192.18.1.3" ] && [ "$(uci -q get shadowsocks-libev.sss0.key)" != "" ]; then
|
||||||
_log "Can't find Shadowsocks, restart it..."
|
_log "Can't find Shadowsocks, restart it..."
|
||||||
/etc/init.d/shadowsocks-libev restart 2>&1 >/dev/null
|
/etc/init.d/shadowsocks-libev restart 2>&1 >/dev/null
|
||||||
sleep 5
|
sleep 5
|
||||||
|
@ -1594,7 +1594,13 @@ if [ -f /etc/init.d/glorytun-udp ] && [ "$(pgrep glorytun-udp)" = "" ] && [ "$(u
|
||||||
sleep 5
|
sleep 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$(pgrep unbound)" = "" ] && [ -f /etc/init.d/unbound ] && [ "$(uci -q get unbound.@unbound[0].enabled)" = "1" ]; then
|
if [ "$(pgrep -f dnsmasq)" = "" ] && [ -f /etc/init.d/dnsmasq ]; then
|
||||||
|
_log "Can't find dnsmasq, restart it..."
|
||||||
|
/etc/init.d/dnsmasq restart 2>&1 >/dev/null
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
if [ "$(pgrep -f unbound)" = "" ] && [ -f /etc/init.d/unbound ] && [ "$(uci -q get unbound.@unbound[0].enabled)" = "1" ]; then
|
||||||
|
_log "Can't find unbound, restart it..."
|
||||||
/etc/init.d/unbound restart 2>&1 >/dev/null
|
/etc/init.d/unbound restart 2>&1 >/dev/null
|
||||||
sleep 5
|
sleep 5
|
||||||
fi
|
fi
|
||||||
|
@ -1665,7 +1671,7 @@ set_get_config() {
|
||||||
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" ]; then
|
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" ]; then
|
||||||
config_load openmptcprouter
|
config_load openmptcprouter
|
||||||
config_foreach set_get_config server
|
config_foreach set_get_config server
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
fi
|
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
|
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
|
||||||
|
@ -1676,13 +1682,13 @@ fi
|
||||||
if [ "$(uci -q get glorytun.vpn.enable)" = "1" ] && [ "$(uci -q get glorytun.vpn.key)" = "" ]; then
|
if [ "$(uci -q get glorytun.vpn.enable)" = "1" ] && [ "$(uci -q get glorytun.vpn.key)" = "" ]; then
|
||||||
config_load openmptcprouter
|
config_load openmptcprouter
|
||||||
config_foreach set_get_config server
|
config_foreach set_get_config server
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ "$(uci -q get v2ray.omrout.s_vless_user_id)" = "" ]; then
|
if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ "$(uci -q get v2ray.omrout.s_vless_user_id)" = "" ]; then
|
||||||
config_load openmptcprouter
|
config_load openmptcprouter
|
||||||
config_foreach set_get_config server
|
config_foreach set_get_config server
|
||||||
uci -q commit openmptcprouter
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$(logread | tail -n 2 | grep 'Ring expansion failed')" ]; then
|
if [ -n "$(logread | tail -n 2 | grep 'Ring expansion failed')" ]; then
|
||||||
|
@ -1692,19 +1698,25 @@ if [ -n "$(logread | tail -n 2 | grep 'Ring expansion failed')" ]; then
|
||||||
echo 1 > /sys/bus/pci/rescan
|
echo 1 > /sys/bus/pci/rescan
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f /etc/init.d/omr-bypass ] && [ "$(iptables-save | grep omr-bypass)" = "" ] && [ "$(pgrep -f omr-bypass)" = "" ]; then
|
if [ -f /etc/init.d/omr-bypass ] && (([ -f /usr/sbin/iptables-legacy-save ] && [ "$(iptables-legacy-save 2>/dev/null | grep omr-bypass)" = "" ]) || [ "$(iptables-save 2>/dev/null | grep omr-bypass)" = "" ]) && [ "$(pgrep -f omr-bypass)" = "" ]; then
|
||||||
_log "Can't find omr-bypass rules, restart omr-bypass..."
|
_log "Can't find omr-bypass rules, restart omr-bypass..."
|
||||||
/etc/init.d/omr-bypass 2>&1 >/dev/null
|
/etc/init.d/omr-bypass 2>&1 >/dev/null
|
||||||
sleep 5
|
sleep 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f /etc/backup/installed_packages.txt ] && [ -n "$(grep overlay /etc/backup/installed_packages.txt)" ]; then
|
if [ -f /etc/backup/installed_packages.txt ] && [ -n "$(grep overlay /etc/backup/installed_packages.txt)" ] && ([ "$(uci -q get openmptcprouter.settings.sysupgrade_lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 31)) - $(uci -q get openmptcprouter.settings.sysupgrade_lc))) -gt 3600 ]) && [ $(($(date +"%s") - $(stat -c "%Y" /etc/backup/installed_packages.txt))) -gt 86400 ]; then
|
||||||
_log "Reinstall packages..."
|
_log "Reinstall packages..."
|
||||||
|
uci -q set openmptcprouter.settings.sysupgrade_lc=$(date +"%s")
|
||||||
/etc/init.d/sysupgrade restart 2>&1 >/dev/null
|
/etc/init.d/sysupgrade restart 2>&1 >/dev/null
|
||||||
|
sleep 10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$(pgrep openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]); then
|
if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && [ "$(uci -q show openmptcprouter | grep token_error=\'1\')" != "" ]; then
|
||||||
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
|
/etc/init.d/openmptcprouter-vps token >/dev/null 2>&1 &
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]); then
|
||||||
|
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 &
|
||||||
sleep 5
|
sleep 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1713,8 +1725,8 @@ if [ "$(uci -q get sqm.${OMR_TRACKER_INTERFACE}.enabled)" = "1" ] && [ "$(uci -q
|
||||||
sleep 5
|
sleep 5
|
||||||
fi
|
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 -f openmptcprouter-vps)" = "" ] && [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" = "" ] && ([ "$(uci -q show openmptcprouter | grep set_firewall=\'1\')" != "" ] || (([ -f /usr/sbin/iptables-legacy-save ] && [ -z "$(iptables-save 2>/dev/null | grep omr_dst_bypass_${OMR_TRACKER_DEVICE})" ]) || [ -z "$(iptables-save 2>/dev/null | grep omr_dst_bypass_${OMR_TRACKER_DEVICE})" ])); then
|
||||||
if [ "$(pgrep -f set_vps_firewall)" = "" ] && [ "$(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 -f set_vps_firewall)" = "" ] && [ "$(uci -q show openmptcprouter | grep server)" != "" ] && [ "$(uci -q show openmptcprouter | grep password)" != "" ] && [ "$(pgrep -f openmptcprouter-vps)" = "" ] && [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" = "" ] && [ "$(uci -q show openmptcprouter | grep set_firewall=\'1\')" != "" ]; then
|
||||||
check_server_fw() {
|
check_server_fw() {
|
||||||
[ "$(uci -q get openmptcprouter.$1.set_firewall)" = "1" ] && {
|
[ "$(uci -q get openmptcprouter.$1.set_firewall)" = "1" ] && {
|
||||||
_log "Set firewall on server $1"
|
_log "Set firewall on server $1"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# Based on package from https://github.com/openwrt-develop/ndpi-netfilter/
|
# Based on package from https://github.com/openwrt-develop/ndpi-netfilter/
|
||||||
# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
# Copyright (C) 2018-2022 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
|
@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=ndpi-netfilter2
|
PKG_NAME:=ndpi-netfilter2
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=4
|
||||||
PKG_REV:=b19e6392cf0c7d51c44e076a91fc4db0cbbd6403
|
PKG_REV:=cf017cc2fecee644d0b2ff633a17377f776d1505
|
||||||
PKG_VERSION:=4-$(PKG_REV)
|
PKG_VERSION:=4-$(PKG_REV)
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
|
|
19
ndpi-netfilter2/patches/fcommon.patch
Normal file
19
ndpi-netfilter2/patches/fcommon.patch
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
--- a/ndpi-netfilter/ipt/Makefile.anc 2022-09-05 09:34:30.579787766 +0200
|
||||||
|
+++ b/ndpi-netfilter/ipt/Makefile 2022-09-05 09:34:42.555588398 +0200
|
||||||
|
@@ -2,14 +2,14 @@
|
||||||
|
NDPI_PRO := ${NDPI_SRC}/lib/protocols
|
||||||
|
XTBL := $(shell pkg-config --variable=xtlibdir xtables)
|
||||||
|
|
||||||
|
-CFLAGS = -fPIC -I../.. -I${NDPI_SRC}/include -I${NDPI_SRC}/lib -I../src -I../libre -DOPENDPI_NETFILTER_MODULE -O2 -Wall
|
||||||
|
+CFLAGS = -fPIC -I../.. -I${NDPI_SRC}/include -I${NDPI_SRC}/lib -I../src -I../libre -DOPENDPI_NETFILTER_MODULE -O2 -Wall -fcommon
|
||||||
|
|
||||||
|
all: libxt_ndpi.so
|
||||||
|
install: libxt_ndpi.so
|
||||||
|
if [ -n "$(DESTDIR)$(XTBL)" -a -d "$(DESTDIR)$(XTBL)" ]; then install -v libxt_ndpi.so $(DESTDIR)$(XTBL); ln -fs libxt_ndpi.so $(DESTDIR)$(XTBL)/libxt_NDPI.so ; else echo "No pkg-config --variable=xtlibdir xtables"; fi
|
||||||
|
|
||||||
|
lib%.so: lib%.o
|
||||||
|
- $(CC) -shared -o $@ $^;
|
||||||
|
+ $(CC) -shared -nostartfiles -o $@ $^;
|
||||||
|
lib%.o: lib%.c ../src/xt_ndpi.h ${NDPI_SRC}/include/ndpi_config.h ../libre/regexp.h ../libre/regexp.c
|
||||||
|
$(CC) ${CFLAGS} -D_INIT=lib$*_init -c -o $@ $<;
|
||||||
|
clean:
|
|
@ -4,6 +4,16 @@
|
||||||
name=$0
|
name=$0
|
||||||
basename="$(basename $0)"
|
basename="$(basename $0)"
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_log() {
|
_log() {
|
||||||
logger -p daemon.info -t "${basename}" "$@"
|
logger -p daemon.info -t "${basename}" "$@"
|
||||||
}
|
}
|
||||||
|
@ -76,7 +86,7 @@ while true; do
|
||||||
uci -q set openmptcprouter.omr.ss_${server}="up"
|
uci -q set openmptcprouter.omr.ss_${server}="up"
|
||||||
uci -q commit openmptcprouter.omr
|
uci -q commit openmptcprouter.omr
|
||||||
}
|
}
|
||||||
if [ -z "$(iptables-save | grep :ssr)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then
|
if [ -z "$($IPTABLESSAVE 2>/dev/null | grep :ssr)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then
|
||||||
_log "Reload Shadowsocks rules"
|
_log "Reload Shadowsocks rules"
|
||||||
/etc/init.d/shadowsocks-libev rules_up 2> /dev/null
|
/etc/init.d/shadowsocks-libev rules_up 2> /dev/null
|
||||||
_get_ip
|
_get_ip
|
||||||
|
@ -87,7 +97,7 @@ while true; do
|
||||||
last=$((last + 1 ))
|
last=$((last + 1 ))
|
||||||
[ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host"
|
[ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host"
|
||||||
[ "${last}" -ge "${retry}" ] && {
|
[ "${last}" -ge "${retry}" ] && {
|
||||||
if [ -n "$(iptables -w -t nat -L -n | grep ssr)" ]; then
|
if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ssr)" ]; then
|
||||||
_log "Shadowsocks ${server} is down (can't contact via http ${nocontact})"
|
_log "Shadowsocks ${server} is down (can't contact via http ${nocontact})"
|
||||||
uci -q set openmptcprouter.omr.ss_${server}="down"
|
uci -q set openmptcprouter.omr.ss_${server}="down"
|
||||||
uci -q commit openmptcprouter.omr
|
uci -q commit openmptcprouter.omr
|
||||||
|
|
|
@ -4,6 +4,13 @@
|
||||||
name=$0
|
name=$0
|
||||||
basename="$(basename $0)"
|
basename="$(basename $0)"
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
_log() {
|
_log() {
|
||||||
logger -p daemon.info -t "${basename}" "$@"
|
logger -p daemon.info -t "${basename}" "$@"
|
||||||
}
|
}
|
||||||
|
@ -70,7 +77,7 @@ while true; do
|
||||||
uci -q set openmptcprouter.omr.v2ray="up"
|
uci -q set openmptcprouter.omr.v2ray="up"
|
||||||
uci -q commit openmptcprouter.omr
|
uci -q commit openmptcprouter.omr
|
||||||
}
|
}
|
||||||
if [ -z "$(iptables -w -t nat -L -n | grep v2r)" ]; then
|
if [ -z "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep v2r)" ]; then
|
||||||
_log "Reload V2Ray rules"
|
_log "Reload V2Ray rules"
|
||||||
/etc/init.d/v2ray rules_up 2> /dev/null
|
/etc/init.d/v2ray rules_up 2> /dev/null
|
||||||
_get_ip
|
_get_ip
|
||||||
|
@ -81,7 +88,7 @@ while true; do
|
||||||
last=$((last + 1 ))
|
last=$((last + 1 ))
|
||||||
[ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host"
|
[ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host"
|
||||||
[ "${last}" -ge "${retry}" ] && {
|
[ "${last}" -ge "${retry}" ] && {
|
||||||
if [ -n "$(iptables -w -t nat -L -n | grep v2r)" ]; then
|
if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep v2r)" ]; then
|
||||||
_log "V2Ray is down (can't contact via http ${nocontact})"
|
_log "V2Ray is down (can't contact via http ${nocontact})"
|
||||||
uci -q set openmptcprouter.omr.v2ray="down"
|
uci -q set openmptcprouter.omr.v2ray="down"
|
||||||
uci -q commit openmptcprouter.omr
|
uci -q commit openmptcprouter.omr
|
||||||
|
|
|
@ -62,7 +62,7 @@ MY_DEPENDS := \
|
||||||
rng-tools \
|
rng-tools \
|
||||||
openvpn-openssl \
|
openvpn-openssl \
|
||||||
mmc-utils \
|
mmc-utils \
|
||||||
libimobiledevice \
|
libimobiledevice libimobiledevice-utils \
|
||||||
comgt \
|
comgt \
|
||||||
kmod-random-core \
|
kmod-random-core \
|
||||||
kmod-netem \
|
kmod-netem \
|
||||||
|
@ -75,14 +75,14 @@ MY_DEPENDS := \
|
||||||
TARGET_mvebu:kmod-mwlwifi TARGET_mvebu:mwlwifi-firmware-88w8864 TARGET_mvebu:mwlwifi-firmware-88w8897 TARGET_mvebu:mwlwifi-firmware-88w8964 TARGET_mvebu:mwlwifi-firmware-88w8997 \
|
TARGET_mvebu:kmod-mwlwifi TARGET_mvebu:mwlwifi-firmware-88w8864 TARGET_mvebu:mwlwifi-firmware-88w8897 TARGET_mvebu:mwlwifi-firmware-88w8964 TARGET_mvebu:mwlwifi-firmware-88w8997 \
|
||||||
!TARGET_mvebu:kmod-usb-serial !TARGET_mvebu:kmod-usb-serial-option !TARGET_mvebu:kmod-usb-serial-wwan !TARGET_mvebu:usb-modeswitch !TARGET_mvebu:uqmi \
|
!TARGET_mvebu:kmod-usb-serial !TARGET_mvebu:kmod-usb-serial-option !TARGET_mvebu:kmod-usb-serial-wwan !TARGET_mvebu:usb-modeswitch !TARGET_mvebu:uqmi \
|
||||||
!TARGET_mvebu:umbim !TARGET_mvebu:kmod-mii !TARGET_mvebu:kmod-usb-net !TARGET_mvebu:kmod-usb-wdm !TARGET_mvebu:kmod-usb-net-qmi-wwan !TARGET_mvebu:kmod-usb-net-cdc-mbim !TARGET_mvebu:umbim \
|
!TARGET_mvebu:umbim !TARGET_mvebu:kmod-mii !TARGET_mvebu:kmod-usb-net !TARGET_mvebu:kmod-usb-wdm !TARGET_mvebu:kmod-usb-net-qmi-wwan !TARGET_mvebu:kmod-usb-net-cdc-mbim !TARGET_mvebu:umbim \
|
||||||
!TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd \
|
!TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd !TARGET_mvebu:libusbmuxd \
|
||||||
kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su kmod-rtl8812au-ct \
|
kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su kmod-rtl8812au-ct \
|
||||||
!TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 TARGET_r4s:kmod-r8168 (TARGET_x86||TARGET_x86_64):kmod-usb-net-rtl8152 \
|
!TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 TARGET_r4s:kmod-r8168 (TARGET_x86||TARGET_x86_64):kmod-usb-net-rtl8152 \
|
||||||
luci-app-mlvpn mlvpn 464xlat kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||aarch64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \
|
luci-app-mlvpn mlvpn 464xlat kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||aarch64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \
|
||||||
luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-openssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf (TARGET_x86||TARGET_x86_64):kmod-igbvf \
|
luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-openssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf (TARGET_x86||TARGET_x86_64):kmod-igbvf \
|
||||||
hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding luci-app-sysupgrade \
|
hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding luci-app-sysupgrade \
|
||||||
luci-theme-openwrt-2020 luci-proto-wireguard luci-app-wireguard kmod-crypto-lib-blake2s (TARGET_x86||TARGET_x86_64):kmod-r8125 TARGET_x86_64:kmod-atlantic \
|
luci-theme-openwrt-2020 luci-proto-wireguard luci-app-wireguard kmod-crypto-lib-blake2s (TARGET_x86||TARGET_x86_64):kmod-r8125 TARGET_x86_64:kmod-atlantic \
|
||||||
LINUX_5_15:mptcpd (TARGET_x86||TARGET_x86_64):kmod-igc kmod-mmc-spi kmod-macsec
|
LINUX_5_15:mptcpd (TARGET_x86||TARGET_x86_64):kmod-igc kmod-mmc-spi kmod-macsec usbutils
|
||||||
# !TARGET_mvebu:kmod-usb-net-smsc75xx
|
# !TARGET_mvebu:kmod-usb-net-smsc75xx
|
||||||
# libnetfilter-conntrack ebtables ebtables-utils ip-full nstat \
|
# libnetfilter-conntrack ebtables ebtables-utils ip-full nstat \
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,31 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables-legacy"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
ss_rules_fw_drop() {
|
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" }' |
|
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" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "iptables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IPTABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fw=$((fw+1))
|
fw=$((fw+1))
|
||||||
fi
|
fi
|
||||||
done
|
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" }' |
|
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" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "iptables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IPTABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fw=$((fw+1))
|
fw=$((fw+1))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -22,16 +35,16 @@ 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" }' |
|
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" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "ip6tables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IP6TABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fw=$((fw+1))
|
fw=$((fw+1))
|
||||||
fi
|
fi
|
||||||
done
|
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" }' |
|
timeout 1 fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j DROP/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "ip6tables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IP6TABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fw=$((fw+1))
|
fw=$((fw+1))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -41,16 +54,16 @@ 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" }' |
|
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" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "iptables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
eval "$IPTABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
||||||
fw=$((fw+1))
|
fw=$((fw+1))
|
||||||
fi
|
fi
|
||||||
done
|
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" }' |
|
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" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "iptables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
eval "$IPTABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
||||||
fw=$((fw+1))
|
fw=$((fw+1))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -60,21 +73,21 @@ 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" }' |
|
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" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "ip6tables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
eval "$IP6TABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
||||||
fi
|
fi
|
||||||
done
|
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" }' |
|
timeout 1 fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j DROP/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' |
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "ip6tables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
eval "$IP6TABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -n "$(pgrep blocklanfw)" ] && exit 0
|
[ -n "$(pgrep blocklanfw)" ] && exit 0
|
||||||
[ -z "$(iptables-save | grep zone_lan)" ] && exit 0
|
[ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan)" ] && exit 0
|
||||||
fw=0
|
fw=0
|
||||||
if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks" ]; then
|
if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks" ]; then
|
||||||
ss_rules6_fw_drop
|
ss_rules6_fw_drop
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore"
|
||||||
|
else
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-restore"
|
||||||
|
fi
|
||||||
|
|
||||||
_setup_rules() {
|
_setup_rules() {
|
||||||
config_get lookup $1 lookup
|
config_get lookup $1 lookup
|
||||||
[ -n "$lookup" ] && [ -z "$(ip rule list fwmark 0x${lookup})" ] && {
|
[ -n "$lookup" ] && [ -z "$(ip rule list fwmark 0x${lookup})" ] && {
|
||||||
|
@ -30,8 +38,8 @@ _setup_fw() {
|
||||||
[ -n "$src_ips_forward" ] && rule="$rule -s $(echo "${src_ips_forward}" | sed 's/ /,/g')"
|
[ -n "$src_ips_forward" ] && rule="$rule -s $(echo "${src_ips_forward}" | sed 's/ /,/g')"
|
||||||
[ -n "$ifnames" ] && rule="$rule -i $(echo "${ifnames}" | sed 's/ /-i /g')"
|
[ -n "$ifnames" ] && rule="$rule -i $(echo "${ifnames}" | sed 's/ /-i /g')"
|
||||||
if [ -n "$rule" ] && [ -n "$lookup" ]; then
|
if [ -n "$rule" ] && [ -n "$lookup" ]; then
|
||||||
iptables-save --counters | grep -v "0x${lookup}" | iptables-restore -w --counters
|
$IPTABLESAVE --counters | grep -v "0x${lookup}" | $IPTABLERESTORE -w --counters
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLERESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A omr-gre-tunnel ${rule} -j MARK --set-mark 0x${lookup}
|
-A omr-gre-tunnel ${rule} -j MARK --set-mark 0x${lookup}
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -39,8 +47,8 @@ _setup_fw() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -z "$(iptables-save | grep omr-gre-tunnel)" ]; then
|
if [ -z "$($IPTABLESAVE | grep omr-gre-tunnel)" ]; then
|
||||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
$IPTABLERESTORE -w --wait=60 --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
:omr-gre-tunnel -
|
:omr-gre-tunnel -
|
||||||
-I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-gre-tunnel
|
-I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-gre-tunnel
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
_set_ttl() {
|
_set_ttl() {
|
||||||
device=$(uci -q get network.$1.name)
|
device=$(uci -q get network.$1.name)
|
||||||
ttl=$(uci -q get network.$1.ttl)
|
ttl=$(uci -q get network.$1.ttl)
|
||||||
if [ -n "$ttl" ] && [ -z "$(iptables-save | grep TTL | grep $device)" ]; then
|
if [ -n "$ttl" ] && [ -z "$(iptables-save 2>/dev/null | grep TTL | grep $device)" ]; then
|
||||||
iptables -w -t mangle -I POSTROUTING -o $device -j TTL --ttl-set $ttl 2>&1 >/dev/null
|
iptables -w -t mangle -I POSTROUTING -o $device -j TTL --ttl-set $ttl 2>&1 >/dev/null
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,27 @@ START=99
|
||||||
|
|
||||||
USE_PROCD=1
|
USE_PROCD=1
|
||||||
|
|
||||||
EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall get_openvpn_key set_gre_tunnel"
|
EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall get_openvpn_key set_gre_tunnel token"
|
||||||
|
|
||||||
. /usr/lib/unbound/iptools.sh
|
. /usr/lib/unbound/iptools.sh
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables-legacy"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-legacy-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
_parse_result() {
|
_parse_result() {
|
||||||
result=$("echo $1 | jsonfilter -q -e '@.result'")
|
result=$("echo $1 | jsonfilter -q -e '@.result'")
|
||||||
echo $result
|
echo $result
|
||||||
|
@ -740,7 +757,8 @@ _set_mptcp_vps() {
|
||||||
scheduler="$(uci -q get network.globals.mptcp_scheduler)"
|
scheduler="$(uci -q get network.globals.mptcp_scheduler)"
|
||||||
syn_retries="$(uci -q get network.globals.mptcp_syn_retries)"
|
syn_retries="$(uci -q get network.globals.mptcp_syn_retries)"
|
||||||
congestion="$(uci -q get network.globals.congestion)"
|
congestion="$(uci -q get network.globals.congestion)"
|
||||||
mptcp_version="0"
|
mptcp_version="$(uci -q get network.globals.mptcp_version)"
|
||||||
|
[ -z "$mptcp_version" ] && mptcp_version="0"
|
||||||
[ ! -f /proc/sys/net/mptcp/mptcp_enabled ] && mptcp_version="1"
|
[ ! -f /proc/sys/net/mptcp/mptcp_enabled ] && mptcp_version="1"
|
||||||
[ -z "$congestion" ] && congestion="bbr"
|
[ -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" ] || [ "$mptcp_version_current" != "$mptcp_version" ]; then
|
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" ] || [ "$mptcp_version_current" != "$mptcp_version" ]; then
|
||||||
|
@ -937,7 +955,7 @@ _vps_firewall_redirect_port() {
|
||||||
comment=""
|
comment=""
|
||||||
[ -n "$src_dip" ] && {
|
[ -n "$src_dip" ] && {
|
||||||
comment=" to $src_dip"
|
comment=" to $src_dip"
|
||||||
iptables-save --counters | sed "s:-d $src_dip/32::g" | iptables-restore -w
|
$IPTABLESSAVE --counters | sed "s:-d $src_dip/32::g" | $IPTABLESRESTORE -w
|
||||||
}
|
}
|
||||||
[ -n "$src_ip" ] && comment=" from $src_ip"
|
[ -n "$src_ip" ] && comment=" from $src_ip"
|
||||||
if [ "$target" = "ACCEPT" ]; then
|
if [ "$target" = "ACCEPT" ]; then
|
||||||
|
@ -1019,7 +1037,7 @@ _vps_firewall_redirect_port() {
|
||||||
comment=""
|
comment=""
|
||||||
[ -n "$src_dip" ] && {
|
[ -n "$src_dip" ] && {
|
||||||
comment=" to $src_dip"
|
comment=" to $src_dip"
|
||||||
iptables-save --counters | sed "s:-d $src_dip/32::g" | iptables-restore -w
|
$IPTABLESSAVE --counters | sed "s:-d $src_dip/32::g" | $IPTABLESRESTORE -w
|
||||||
}
|
}
|
||||||
[ -n "$src_ip" ] && comment=" from $src_ip"
|
[ -n "$src_ip" ] && comment=" from $src_ip"
|
||||||
checkfw=$(echo "$vpsfwlist" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}")
|
checkfw=$(echo "$vpsfwlist" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}")
|
||||||
|
@ -1461,8 +1479,12 @@ _set_config_from_vps() {
|
||||||
uci -q batch <<-EOF >/dev/null
|
uci -q batch <<-EOF >/dev/null
|
||||||
set openvpn.omr.port=$openvpn_port
|
set openvpn.omr.port=$openvpn_port
|
||||||
set openvpn.omr.secret="/etc/luci-uploads/openvpn.key"
|
set openvpn.omr.secret="/etc/luci-uploads/openvpn.key"
|
||||||
set openvpn.omr.enabled=$openvpn_state
|
|
||||||
EOF
|
EOF
|
||||||
|
if [ "$openvpn_state" = "1" ]; then
|
||||||
|
uci -q set openvpn.omr.enabled=$openvpn_state
|
||||||
|
else
|
||||||
|
uci -q del openvpn.omr.enabled
|
||||||
|
fi
|
||||||
if [ "$(uci -q get openvpn.omr.remote)" != "127.0.0.1" ]; then
|
if [ "$(uci -q get openvpn.omr.remote)" != "127.0.0.1" ]; then
|
||||||
uci -q set openvpn.omr.remote="$vpsip"
|
uci -q set openvpn.omr.remote="$vpsip"
|
||||||
fi
|
fi
|
||||||
|
@ -1787,7 +1809,7 @@ _count_server() {
|
||||||
serversnb=$((serversnb+1))
|
serversnb=$((serversnb+1))
|
||||||
}
|
}
|
||||||
|
|
||||||
_config_service() {
|
_get_token() {
|
||||||
servername=$1
|
servername=$1
|
||||||
[ -z "$(uci -q get openmptcprouter.${servername}.username)" ] && return
|
[ -z "$(uci -q get openmptcprouter.${servername}.username)" ] && return
|
||||||
[ -z "$(uci -q get openmptcprouter.${servername}.password)" ] && return
|
[ -z "$(uci -q get openmptcprouter.${servername}.password)" ] && return
|
||||||
|
@ -1795,7 +1817,6 @@ _config_service() {
|
||||||
[ -z "$(uci -q get openmptcprouter.${servername}.ip)" ] && return
|
[ -z "$(uci -q get openmptcprouter.${servername}.ip)" ] && return
|
||||||
[ "$(uci -q get openmptcprouter.${servername}.disabled)" = "1" ] && return
|
[ "$(uci -q get openmptcprouter.${servername}.disabled)" = "1" ] && return
|
||||||
token=""
|
token=""
|
||||||
vps_config=""
|
|
||||||
_login
|
_login
|
||||||
[ -z "$token" ] && {
|
[ -z "$token" ] && {
|
||||||
reason=""
|
reason=""
|
||||||
|
@ -1836,8 +1857,18 @@ _config_service() {
|
||||||
uci -q batch <<-EOF >/dev/null
|
uci -q batch <<-EOF >/dev/null
|
||||||
set openmptcprouter.${servername}.admin_error=1
|
set openmptcprouter.${servername}.admin_error=1
|
||||||
EOF
|
EOF
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
echo "$server:$serverport:$token"
|
||||||
|
}
|
||||||
|
|
||||||
|
_config_service() {
|
||||||
|
servername=$1
|
||||||
|
vps_config=""
|
||||||
|
tokenserver=$(_get_token $servername)
|
||||||
|
server="$(echo $tokenserver | cut -f1 -d:)"
|
||||||
|
serverport="$(echo $tokenserver | cut -f2 -d:)"
|
||||||
|
token="$(echo $tokenserver | cut -f3 -d:)"
|
||||||
|
[ -z "$token" ] && return
|
||||||
error=0
|
error=0
|
||||||
if [ -n "$serial" ]; then
|
if [ -n "$serial" ]; then
|
||||||
[ -z "$vps_config" ] && vps_config=$(_get_json "config?serial=${serial}")
|
[ -z "$vps_config" ] && vps_config=$(_get_json "config?serial=${serial}")
|
||||||
|
@ -1954,6 +1985,11 @@ set_pihole() {
|
||||||
config_foreach _set_pihole_server server
|
config_foreach _set_pihole_server server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
token() {
|
||||||
|
config_load openmptcprouter
|
||||||
|
config_foreach _get_token server
|
||||||
|
}
|
||||||
|
|
||||||
start_service() {
|
start_service() {
|
||||||
serversnb=0
|
serversnb=0
|
||||||
wanips=""
|
wanips=""
|
||||||
|
@ -1974,7 +2010,8 @@ start_service() {
|
||||||
}
|
}
|
||||||
|
|
||||||
service_triggers() {
|
service_triggers() {
|
||||||
procd_add_reload_trigger openmptcprouter network shadowsocks-libev v2ray glorytun glorytun-udp mlspn openvpn dsvpn
|
#procd_add_reload_trigger openmptcprouter network shadowsocks-libev v2ray glorytun glorytun-udp mlvpn openvpn dsvpn
|
||||||
|
procd_add_reload_trigger shadowsocks-libev v2ray glorytun glorytun-udp mlvpn dsvpn
|
||||||
procd_add_config_trigger "config.change" "firewall" /etc/init.d/openmptcprouter-vps set_vps_firewall
|
procd_add_config_trigger "config.change" "firewall" /etc/init.d/openmptcprouter-vps set_vps_firewall
|
||||||
#procd_add_config_trigger "config.change" "network" /etc/init.d/openmptcprouter-vps set_gre_tunnel
|
#procd_add_config_trigger "config.change" "network" /etc/init.d/openmptcprouter-vps set_gre_tunnel
|
||||||
#procd_add_reload_trigger openmptcprouter shadowsocks-libev network upnpd
|
#procd_add_reload_trigger openmptcprouter shadowsocks-libev network upnpd
|
||||||
|
|
|
@ -242,7 +242,13 @@ uci -q batch <<-EOF >/dev/null
|
||||||
set firewall.@include[0].reload='1'
|
set firewall.@include[0].reload='1'
|
||||||
commit firewall
|
commit firewall
|
||||||
EOF
|
EOF
|
||||||
if [ "$(uci -q get openmptcprouter.settings.sipalg)" != "1" ]; then
|
if [ "$(uci -q get openmptcprouter.settings.sipalg)" = "" ]; then
|
||||||
|
uci -q batch <<-EOF >/dev/null
|
||||||
|
set openmptcprouter.settings.sipalg='1'
|
||||||
|
commit openmptcprouter
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
if [ "$(uci -q get openmptcprouter.settings.sipalg)" = "0" ]; then
|
||||||
uci -q batch <<-EOF >/dev/null
|
uci -q batch <<-EOF >/dev/null
|
||||||
set firewall.zone_lan.auto_helper='0'
|
set firewall.zone_lan.auto_helper='0'
|
||||||
set firewall.zone_wan.auto_helper='0'
|
set firewall.zone_wan.auto_helper='0'
|
||||||
|
|
|
@ -7,10 +7,14 @@ include $(TOPDIR)/rules.mk
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=r8125
|
PKG_NAME:=r8125
|
||||||
PKG_VERSION:=9.006.04
|
PKG_VERSION:=9.010.01-1
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
|
PKG_SOURCE_URL:=https://codeload.github.com/awesometic/realtek-r8125-dkms/tar.gz/$(PKG_VERSION)?
|
||||||
|
PKG_HASH:=81fb9a100e6cefb421557639b476fd03af61a99c55bc8fb03c6e396532bd0944
|
||||||
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/realtek-$(PKG_NAME)-dkms-$(PKG_VERSION)
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
@ -18,7 +22,7 @@ define KernelPackage/r8125
|
||||||
TITLE:=Driver for Realtek r8125 chipsets
|
TITLE:=Driver for Realtek r8125 chipsets
|
||||||
SUBMENU:=Network Devices
|
SUBMENU:=Network Devices
|
||||||
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
||||||
FILES:= $(PKG_BUILD_DIR)/r8125.ko
|
FILES:= $(PKG_BUILD_DIR)/src/r8125.ko
|
||||||
AUTOLOAD:=$(call AutoProbe,r8125)
|
AUTOLOAD:=$(call AutoProbe,r8125)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -26,20 +30,8 @@ define Package/r8125/description
|
||||||
This package contains a driver for Realtek r8125 chipsets.
|
This package contains a driver for Realtek r8125 chipsets.
|
||||||
endef
|
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
|
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
$(MAKE) $(R8125_MAKEOPTS) modules
|
+$(KERNEL_MAKE) M=$(PKG_BUILD_DIR)/src modules
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call KernelPackage,r8125))
|
$(eval $(call KernelPackage,r8125))
|
||||||
|
|
|
@ -1,197 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
CONFIG_SOC_LAN = n
|
|
||||||
ENABLE_REALWOW_SUPPORT = n
|
|
||||||
ENABLE_DASH_SUPPORT = n
|
|
||||||
ENABLE_DASH_PRINTER_SUPPORT = n
|
|
||||||
CONFIG_DOWN_SPEED_100 = n
|
|
||||||
CONFIG_ASPM = y
|
|
||||||
ENABLE_S5WOL = y
|
|
||||||
ENABLE_S5_KEEP_CURR_MAC = n
|
|
||||||
ENABLE_EEE = y
|
|
||||||
ENABLE_S0_MAGIC_PACKET = n
|
|
||||||
ENABLE_TX_NO_CLOSE = y
|
|
||||||
ENABLE_MULTIPLE_TX_QUEUE = n
|
|
||||||
ENABLE_PTP_SUPPORT = n
|
|
||||||
ENABLE_PTP_MASTER_MODE = n
|
|
||||||
ENABLE_RSS_SUPPORT = y
|
|
||||||
ENABLE_LIB_SUPPORT = n
|
|
||||||
ENABLE_USE_FIRMWARE_FILE = n
|
|
||||||
DISABLE_PM_SUPPORT = n
|
|
||||||
DISABLE_MULTI_MSIX_VECTOR = n
|
|
||||||
|
|
||||||
ifneq ($(KERNELRELEASE),)
|
|
||||||
obj-m := r8125.o
|
|
||||||
r8125-objs := r8125_n.o rtl_eeprom.o rtltool.o
|
|
||||||
ifeq ($(CONFIG_SOC_LAN), y)
|
|
||||||
EXTRA_CFLAGS += -DCONFIG_SOC_LAN
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_REALWOW_SUPPORT), y)
|
|
||||||
r8125-objs += r8125_realwow.o
|
|
||||||
EXTRA_CFLAGS += -DENABLE_REALWOW_SUPPORT
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_DASH_SUPPORT), y)
|
|
||||||
r8125-objs += r8125_dash.o
|
|
||||||
EXTRA_CFLAGS += -DENABLE_DASH_SUPPORT
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_DASH_PRINTER_SUPPORT), y)
|
|
||||||
r8125-objs += r8125_dash.o
|
|
||||||
EXTRA_CFLAGS += -DENABLE_DASH_SUPPORT -DENABLE_DASH_PRINTER_SUPPORT
|
|
||||||
endif
|
|
||||||
EXTRA_CFLAGS += -DCONFIG_R8125_NAPI
|
|
||||||
EXTRA_CFLAGS += -DCONFIG_R8125_VLAN
|
|
||||||
ifeq ($(CONFIG_DOWN_SPEED_100), y)
|
|
||||||
EXTRA_CFLAGS += -DCONFIG_DOWN_SPEED_100
|
|
||||||
endif
|
|
||||||
ifeq ($(CONFIG_ASPM), y)
|
|
||||||
EXTRA_CFLAGS += -DCONFIG_ASPM
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_S5WOL), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_S5WOL
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_S5_KEEP_CURR_MAC), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_S5_KEEP_CURR_MAC
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_EEE), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_EEE
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_S0_MAGIC_PACKET), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_S0_MAGIC_PACKET
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_TX_NO_CLOSE), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_TX_NO_CLOSE
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_MULTIPLE_TX_QUEUE), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_MULTIPLE_TX_QUEUE
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_PTP_SUPPORT), y)
|
|
||||||
r8125-objs += r8125_ptp.o
|
|
||||||
EXTRA_CFLAGS += -DENABLE_PTP_SUPPORT
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_PTP_MASTER_MODE), y)
|
|
||||||
EXTRA_CFLAGS += -DENABLE_PTP_MASTER_MODE
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_RSS_SUPPORT), y)
|
|
||||||
r8125-objs += r8125_rss.o
|
|
||||||
EXTRA_CFLAGS += -DENABLE_RSS_SUPPORT
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_LIB_SUPPORT), y)
|
|
||||||
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
|
|
||||||
PWD :=$(shell pwd)
|
|
||||||
DRIVERDIR := $(shell find $(BASEDIR)/kernel/drivers/net/ethernet -name realtek -type d)
|
|
||||||
ifeq ($(DRIVERDIR),)
|
|
||||||
DRIVERDIR := $(shell find $(BASEDIR)/kernel/drivers/net -name realtek -type d)
|
|
||||||
endif
|
|
||||||
ifeq ($(DRIVERDIR),)
|
|
||||||
DRIVERDIR := $(BASEDIR)/kernel/drivers/net
|
|
||||||
endif
|
|
||||||
RTKDIR := $(subst $(BASEDIR)/,,$(DRIVERDIR))
|
|
||||||
|
|
||||||
KERNEL_GCC_VERSION := $(shell cat /proc/version | sed -n 's/.*gcc version \([[:digit:]]\.[[:digit:]]\.[[:digit:]]\).*/\1/p')
|
|
||||||
CCVERSION = $(shell $(CC) -dumpversion)
|
|
||||||
|
|
||||||
KVER = $(shell uname -r)
|
|
||||||
KMAJ = $(shell echo $(KVER) | \
|
|
||||||
sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
|
|
||||||
KMIN = $(shell echo $(KVER) | \
|
|
||||||
sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
|
|
||||||
KREV = $(shell echo $(KVER) | \
|
|
||||||
sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/')
|
|
||||||
|
|
||||||
kver_ge = $(shell \
|
|
||||||
echo test | awk '{if($(KMAJ) < $(1)) {print 0} else { \
|
|
||||||
if($(KMAJ) > $(1)) {print 1} else { \
|
|
||||||
if($(KMIN) < $(2)) {print 0} else { \
|
|
||||||
if($(KMIN) > $(2)) {print 1} else { \
|
|
||||||
if($(KREV) < $(3)) {print 0} else { print 1 } \
|
|
||||||
}}}}}' \
|
|
||||||
)
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: print_vars clean modules install
|
|
||||||
|
|
||||||
print_vars:
|
|
||||||
@echo
|
|
||||||
@echo "CC: " $(CC)
|
|
||||||
@echo "CCVERSION: " $(CCVERSION)
|
|
||||||
@echo "KERNEL_GCC_VERSION: " $(KERNEL_GCC_VERSION)
|
|
||||||
@echo "KVER: " $(KVER)
|
|
||||||
@echo "KMAJ: " $(KMAJ)
|
|
||||||
@echo "KMIN: " $(KMIN)
|
|
||||||
@echo "KREV: " $(KREV)
|
|
||||||
@echo "BASEDIR: " $(BASEDIR)
|
|
||||||
@echo "DRIVERDIR: " $(DRIVERDIR)
|
|
||||||
@echo "PWD: " $(PWD)
|
|
||||||
@echo "RTKDIR: " $(RTKDIR)
|
|
||||||
@echo
|
|
||||||
|
|
||||||
.PHONY:modules
|
|
||||||
modules:
|
|
||||||
#ifeq ($(call kver_ge,5,0,0),1)
|
|
||||||
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
|
|
||||||
#else
|
|
||||||
# $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.PHONY:clean
|
|
||||||
clean:
|
|
||||||
#ifeq ($(call kver_ge,5,0,0),1)
|
|
||||||
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
|
|
||||||
#else
|
|
||||||
# $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) clean
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.PHONY:install
|
|
||||||
install:
|
|
||||||
#ifeq ($(call kver_ge,5,0,0),1)
|
|
||||||
$(MAKE) -C $(KERNELDIR) M=$(PWD) INSTALL_MOD_DIR=$(RTKDIR) modules_install
|
|
||||||
#else
|
|
||||||
# $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) INSTALL_MOD_DIR=$(RTKDIR) modules_install
|
|
||||||
#endif
|
|
||||||
|
|
||||||
endif
|
|
|
@ -1,75 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
CC := gcc
|
|
||||||
LD := ld
|
|
||||||
ARCH := $(shell uname -m | sed 's/i.86/i386/')
|
|
||||||
KSRC := /lib/modules/$(shell uname -r)/build
|
|
||||||
CONFIG_FILE := $(KSRC)/include/linux/autoconf.h
|
|
||||||
KMISC := /lib/modules/$(shell uname -r)/kernel/drivers/net/
|
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(ARCH),x86_64)
|
|
||||||
MODCFLAGS += -mcmodel=kernel -mno-red-zone
|
|
||||||
endif
|
|
||||||
|
|
||||||
#standard flags for module builds
|
|
||||||
MODCFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall
|
|
||||||
MODCFLAGS += -I$(KSRC)/include -I.
|
|
||||||
MODCFLAGS += -DMODVERSIONS -DEXPORT_SYMTAB -include $(KSRC)/include/linux/modversions.h
|
|
||||||
SOURCE := r8125_n.c rtl_eeprom.c rtltool.c
|
|
||||||
OBJS := $(SOURCE:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
SMP := $(shell $(CC) $(MODCFLAGS) -E -dM $(CONFIG_FILE) | \
|
|
||||||
grep CONFIG_SMP | awk '{print $$3}')
|
|
||||||
|
|
||||||
ifneq ($(SMP),1)
|
|
||||||
SMP := 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(SMP),1)
|
|
||||||
MODCFLAGS += -D__SMP__
|
|
||||||
endif
|
|
||||||
|
|
||||||
modules: $(OBJS)
|
|
||||||
$(LD) -r $^ -o r8125.o
|
|
||||||
strip --strip-debug r8125.o
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(CC) $(MODCFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm *.o -f
|
|
||||||
|
|
||||||
install:
|
|
||||||
install -m 744 -c r8125.o $(KMISC)
|
|
2508
r8125/src/r8125.h
2508
r8125/src/r8125.h
File diff suppressed because it is too large
Load diff
|
@ -1,261 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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_R8125_DASH_H
|
|
||||||
#define _LINUX_R8125_DASH_H
|
|
||||||
|
|
||||||
#include <linux/if.h>
|
|
||||||
|
|
||||||
#define SIOCDEVPRIVATE_RTLDASH SIOCDEVPRIVATE+2
|
|
||||||
|
|
||||||
enum rtl_dash_cmd {
|
|
||||||
RTL_DASH_ARP_NS_OFFLOAD = 0,
|
|
||||||
RTL_DASH_SET_OOB_IPMAC,
|
|
||||||
RTL_DASH_NOTIFY_OOB,
|
|
||||||
|
|
||||||
RTL_DASH_SEND_BUFFER_DATA_TO_DASH_FW,
|
|
||||||
RTL_DASH_CHECK_SEND_BUFFER_TO_DASH_FW_COMPLETE,
|
|
||||||
RTL_DASH_GET_RCV_FROM_FW_BUFFER_DATA,
|
|
||||||
RTL_DASH_OOB_REQ,
|
|
||||||
RTL_DASH_OOB_ACK,
|
|
||||||
RTL_DASH_DETACH_OOB_REQ,
|
|
||||||
RTL_DASH_DETACH_OOB_ACK,
|
|
||||||
|
|
||||||
RTL_FW_SET_IPV4 = 0x10,
|
|
||||||
RTL_FW_GET_IPV4,
|
|
||||||
RTL_FW_SET_IPV6,
|
|
||||||
RTL_FW_GET_IPV6,
|
|
||||||
RTL_FW_SET_EXT_SNMP,
|
|
||||||
RTL_FW_GET_EXT_SNMP,
|
|
||||||
RTL_FW_SET_WAKEUP_PATTERN,
|
|
||||||
RTL_FW_GET_WAKEUP_PATTERN,
|
|
||||||
RTL_FW_DEL_WAKEUP_PATTERN,
|
|
||||||
|
|
||||||
RTLT_DASH_COMMAND_INVALID,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl_dash_ip_mac {
|
|
||||||
struct sockaddr ifru_addr;
|
|
||||||
struct sockaddr ifru_netmask;
|
|
||||||
struct sockaddr ifru_hwaddr;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl_dash_ioctl_struct {
|
|
||||||
__u32 cmd;
|
|
||||||
__u32 offset;
|
|
||||||
__u32 len;
|
|
||||||
union {
|
|
||||||
__u32 data;
|
|
||||||
void *data_buffer;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct settings_ipv4 {
|
|
||||||
__u32 IPv4addr;
|
|
||||||
__u32 IPv4mask;
|
|
||||||
__u32 IPv4Gateway;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct settings_ipv6 {
|
|
||||||
__u32 reserved;
|
|
||||||
__u32 prefixLen;
|
|
||||||
__u16 IPv6addr[8];
|
|
||||||
__u16 IPv6Gateway[8];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct settings_ext_snmp {
|
|
||||||
__u16 index;
|
|
||||||
__u16 oid_get_len;
|
|
||||||
__u8 oid_for_get[24];
|
|
||||||
__u8 reserved0[26];
|
|
||||||
__u16 value_len;
|
|
||||||
__u8 value[256];
|
|
||||||
__u8 supported;
|
|
||||||
__u8 reserved1[27];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct wakeup_pattern {
|
|
||||||
__u8 index;
|
|
||||||
__u8 valid;
|
|
||||||
__u8 start;
|
|
||||||
__u8 length;
|
|
||||||
__u8 name[36];
|
|
||||||
__u8 mask[16];
|
|
||||||
__u8 pattern[128];
|
|
||||||
__u32 reserved[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _RX_DASH_FROM_FW_DESC {
|
|
||||||
u16 length;
|
|
||||||
u8 statusLowByte;
|
|
||||||
u8 statusHighByte;
|
|
||||||
u32 resv;
|
|
||||||
u64 BufferAddress;
|
|
||||||
}
|
|
||||||
RX_DASH_FROM_FW_DESC, *PRX_DASH_FROM_FW_DESC;
|
|
||||||
|
|
||||||
typedef struct _TX_DASH_SEND_FW_DESC {
|
|
||||||
u16 length;
|
|
||||||
u8 statusLowByte;
|
|
||||||
u8 statusHighByte;
|
|
||||||
u32 resv;
|
|
||||||
u64 BufferAddress;
|
|
||||||
}
|
|
||||||
TX_DASH_SEND_FW_DESC, *PTX_DASH_SEND_FW_DESC;
|
|
||||||
|
|
||||||
typedef struct _OSOOBHdr {
|
|
||||||
u32 len;
|
|
||||||
u8 type;
|
|
||||||
u8 flag;
|
|
||||||
u8 hostReqV;
|
|
||||||
u8 res;
|
|
||||||
}
|
|
||||||
OSOOBHdr, *POSOOBHdr;
|
|
||||||
|
|
||||||
typedef struct _RX_DASH_BUFFER_TYPE_2 {
|
|
||||||
OSOOBHdr oobhdr;
|
|
||||||
u8 RxDataBuffer[0];
|
|
||||||
}
|
|
||||||
RX_DASH_BUFFER_TYPE_2, *PRX_DASH_BUFFER_TYPE_2;
|
|
||||||
|
|
||||||
#define ALIGN_8 (0x7)
|
|
||||||
#define ALIGN_16 (0xf)
|
|
||||||
#define ALIGN_32 (0x1f)
|
|
||||||
#define ALIGN_64 (0x3f)
|
|
||||||
#define ALIGN_256 (0xff)
|
|
||||||
#define ALIGN_4096 (0xfff)
|
|
||||||
|
|
||||||
#define OCP_REG_CONFIG0 (0x10)
|
|
||||||
#define OCP_REG_CONFIG0_REV_F (0xB8)
|
|
||||||
#define OCP_REG_DASH_POLL (0x30)
|
|
||||||
#define OCP_REG_HOST_REQ (0x34)
|
|
||||||
#define OCP_REG_DASH_REQ (0x35)
|
|
||||||
#define OCP_REG_CR (0x36)
|
|
||||||
#define OCP_REG_DMEMSTA (0x38)
|
|
||||||
#define OCP_REG_GPHYAR (0x60)
|
|
||||||
|
|
||||||
|
|
||||||
#define OCP_REG_CONFIG0_DASHEN BIT_15
|
|
||||||
#define OCP_REG_CONFIG0_OOBRESET BIT_14
|
|
||||||
#define OCP_REG_CONFIG0_APRDY BIT_13
|
|
||||||
#define OCP_REG_CONFIG0_FIRMWARERDY BIT_12
|
|
||||||
#define OCP_REG_CONFIG0_DRIVERRDY BIT_11
|
|
||||||
#define OCP_REG_CONFIG0_OOB_WDT BIT_9
|
|
||||||
#define OCP_REG_CONFIG0_DRV_WAIT_OOB BIT_8
|
|
||||||
#define OCP_REG_CONFIG0_TLSEN BIT_7
|
|
||||||
|
|
||||||
#define HW_DASH_SUPPORT_DASH(_M) ((_M)->HwSuppDashVer > 0 )
|
|
||||||
#define HW_DASH_SUPPORT_TYPE_1(_M) ((_M)->HwSuppDashVer == 1 )
|
|
||||||
#define HW_DASH_SUPPORT_TYPE_2(_M) ((_M)->HwSuppDashVer == 2 )
|
|
||||||
#define HW_DASH_SUPPORT_TYPE_3(_M) ((_M)->HwSuppDashVer == 3 )
|
|
||||||
|
|
||||||
#define RECV_FROM_FW_BUF_SIZE (1520)
|
|
||||||
#define SEND_TO_FW_BUF_SIZE (1520)
|
|
||||||
|
|
||||||
#define RX_DASH_FROM_FW_OWN BIT_15
|
|
||||||
#define TX_DASH_SEND_FW_OWN BIT_15
|
|
||||||
#define TX_DASH_SEND_FW_OWN_HIGHBYTE BIT_7
|
|
||||||
|
|
||||||
#define TXS_CC3_0 (BIT_0|BIT_1|BIT_2|BIT_3)
|
|
||||||
#define TXS_EXC BIT_4
|
|
||||||
#define TXS_LNKF BIT_5
|
|
||||||
#define TXS_OWC BIT_6
|
|
||||||
#define TXS_TES BIT_7
|
|
||||||
#define TXS_UNF BIT_9
|
|
||||||
#define TXS_LGSEN BIT_11
|
|
||||||
#define TXS_LS BIT_12
|
|
||||||
#define TXS_FS BIT_13
|
|
||||||
#define TXS_EOR BIT_14
|
|
||||||
#define TXS_OWN BIT_15
|
|
||||||
|
|
||||||
#define TPPool_HRDY 0x20
|
|
||||||
|
|
||||||
#define HostReqReg (0xC0)
|
|
||||||
#define SystemMasterDescStartAddrLow (0xF0)
|
|
||||||
#define SystemMasterDescStartAddrHigh (0xF4)
|
|
||||||
#define SystemSlaveDescStartAddrLow (0xF8)
|
|
||||||
#define SystemSlaveDescStartAddrHigh (0xFC)
|
|
||||||
|
|
||||||
//DASH Request Type
|
|
||||||
#define WSMANREG 0x01
|
|
||||||
#define OSPUSHDATA 0x02
|
|
||||||
|
|
||||||
#define RXS_OWN BIT_15
|
|
||||||
#define RXS_EOR BIT_14
|
|
||||||
#define RXS_FS BIT_13
|
|
||||||
#define RXS_LS BIT_12
|
|
||||||
|
|
||||||
#define ISRIMR_DP_DASH_OK BIT_15
|
|
||||||
#define ISRIMR_DP_HOST_OK BIT_13
|
|
||||||
#define ISRIMR_DP_REQSYS_OK BIT_11
|
|
||||||
|
|
||||||
#define ISRIMR_DASH_INTR_EN BIT_12
|
|
||||||
#define ISRIMR_DASH_INTR_CMAC_RESET BIT_15
|
|
||||||
|
|
||||||
#define ISRIMR_DASH_TYPE2_ROK BIT_0
|
|
||||||
#define ISRIMR_DASH_TYPE2_RDU BIT_1
|
|
||||||
#define ISRIMR_DASH_TYPE2_TOK BIT_2
|
|
||||||
#define ISRIMR_DASH_TYPE2_TDU BIT_3
|
|
||||||
#define ISRIMR_DASH_TYPE2_TX_FIFO_FULL BIT_4
|
|
||||||
#define ISRIMR_DASH_TYPE2_TX_DISABLE_IDLE BIT_5
|
|
||||||
#define ISRIMR_DASH_TYPE2_RX_DISABLE_IDLE BIT_6
|
|
||||||
|
|
||||||
#define CMAC_OOB_STOP 0x25
|
|
||||||
#define CMAC_OOB_INIT 0x26
|
|
||||||
#define CMAC_OOB_RESET 0x2a
|
|
||||||
|
|
||||||
#define NO_BASE_ADDRESS 0x00000000
|
|
||||||
#define RTL8168FP_OOBMAC_BASE 0xBAF70000
|
|
||||||
#define RTL8168FP_CMAC_IOBASE 0xBAF20000
|
|
||||||
#define RTL8168FP_KVM_BASE 0xBAF80400
|
|
||||||
#define CMAC_SYNC_REG 0x20
|
|
||||||
#define CMAC_RXDESC_OFFSET 0x90 //RX: 0x90 - 0x98
|
|
||||||
#define CMAC_TXDESC_OFFSET 0x98 //TX: 0x98 - 0x9F
|
|
||||||
|
|
||||||
/* cmac write/read MMIO register */
|
|
||||||
#define RTL_CMAC_W8(tp, reg, val8) writeb ((val8), tp->cmac_ioaddr + (reg))
|
|
||||||
#define RTL_CMAC_W16(tp, reg, val16) writew ((val16), tp->cmac_ioaddr + (reg))
|
|
||||||
#define RTL_CMAC_W32(tp, reg, val32) writel ((val32), tp->cmac_ioaddr + (reg))
|
|
||||||
#define RTL_CMAC_R8(tp, reg) readb (tp->cmac_ioaddr + (reg))
|
|
||||||
#define RTL_CMAC_R16(tp, reg) readw (tp->cmac_ioaddr + (reg))
|
|
||||||
#define RTL_CMAC_R32(tp, reg) ((unsigned long) readl (tp->cmac_ioaddr + (reg)))
|
|
||||||
|
|
||||||
int rtl8125_dash_ioctl(struct net_device *dev, struct ifreq *ifr);
|
|
||||||
void HandleDashInterrupt(struct net_device *dev);
|
|
||||||
int AllocateDashShareMemory(struct net_device *dev);
|
|
||||||
void FreeAllocatedDashShareMemory(struct net_device *dev);
|
|
||||||
void DashHwInit(struct net_device *dev);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _LINUX_R8125_DASH_H */
|
|
|
@ -1,264 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
/*
|
|
||||||
################################################################################
|
|
||||||
#
|
|
||||||
# r8168 is the Linux device driver released for Realtek Gigabit 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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
***********************************************************************************/
|
|
||||||
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include <linux/firmware.h>
|
|
||||||
|
|
||||||
#include "r8125_firmware.h"
|
|
||||||
|
|
||||||
enum rtl_fw_opcode {
|
|
||||||
PHY_READ = 0x0,
|
|
||||||
PHY_DATA_OR = 0x1,
|
|
||||||
PHY_DATA_AND = 0x2,
|
|
||||||
PHY_BJMPN = 0x3,
|
|
||||||
PHY_MDIO_CHG = 0x4,
|
|
||||||
PHY_CLEAR_READCOUNT = 0x7,
|
|
||||||
PHY_WRITE = 0x8,
|
|
||||||
PHY_READCOUNT_EQ_SKIP = 0x9,
|
|
||||||
PHY_COMP_EQ_SKIPN = 0xa,
|
|
||||||
PHY_COMP_NEQ_SKIPN = 0xb,
|
|
||||||
PHY_WRITE_PREVIOUS = 0xc,
|
|
||||||
PHY_SKIPN = 0xd,
|
|
||||||
PHY_DELAY_MS = 0xe,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct fw_info {
|
|
||||||
u32 magic;
|
|
||||||
char version[RTL8125_VER_SIZE];
|
|
||||||
__le32 fw_start;
|
|
||||||
__le32 fw_len;
|
|
||||||
u8 chksum;
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,16,0)
|
|
||||||
#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER))
|
|
||||||
#endif
|
|
||||||
#define FW_OPCODE_SIZE sizeof_field(struct rtl8125_fw_phy_action, code[0])
|
|
||||||
|
|
||||||
static bool rtl8125_fw_format_ok(struct rtl8125_fw *rtl_fw)
|
|
||||||
{
|
|
||||||
const struct firmware *fw = rtl_fw->fw;
|
|
||||||
struct fw_info *fw_info = (struct fw_info *)fw->data;
|
|
||||||
struct rtl8125_fw_phy_action *pa = &rtl_fw->phy_action;
|
|
||||||
|
|
||||||
if (fw->size < FW_OPCODE_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!fw_info->magic) {
|
|
||||||
size_t i, size, start;
|
|
||||||
u8 checksum = 0;
|
|
||||||
|
|
||||||
if (fw->size < sizeof(*fw_info))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
for (i = 0; i < fw->size; i++)
|
|
||||||
checksum += fw->data[i];
|
|
||||||
if (checksum != 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
start = le32_to_cpu(fw_info->fw_start);
|
|
||||||
if (start > fw->size)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
size = le32_to_cpu(fw_info->fw_len);
|
|
||||||
if (size > (fw->size - start) / FW_OPCODE_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
strscpy(rtl_fw->version, fw_info->version, RTL8125_VER_SIZE);
|
|
||||||
|
|
||||||
pa->code = (__le32 *)(fw->data + start);
|
|
||||||
pa->size = size;
|
|
||||||
} else {
|
|
||||||
if (fw->size % FW_OPCODE_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
strscpy(rtl_fw->version, rtl_fw->fw_name, RTL8125_VER_SIZE);
|
|
||||||
|
|
||||||
pa->code = (__le32 *)fw->data;
|
|
||||||
pa->size = fw->size / FW_OPCODE_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool rtl8125_fw_data_ok(struct rtl8125_fw *rtl_fw)
|
|
||||||
{
|
|
||||||
struct rtl8125_fw_phy_action *pa = &rtl_fw->phy_action;
|
|
||||||
size_t index;
|
|
||||||
|
|
||||||
for (index = 0; index < pa->size; index++) {
|
|
||||||
u32 action = le32_to_cpu(pa->code[index]);
|
|
||||||
u32 val = action & 0x0000ffff;
|
|
||||||
u32 regno = (action & 0x0fff0000) >> 16;
|
|
||||||
|
|
||||||
switch (action >> 28) {
|
|
||||||
case PHY_READ:
|
|
||||||
case PHY_DATA_OR:
|
|
||||||
case PHY_DATA_AND:
|
|
||||||
case PHY_CLEAR_READCOUNT:
|
|
||||||
case PHY_WRITE:
|
|
||||||
case PHY_WRITE_PREVIOUS:
|
|
||||||
case PHY_DELAY_MS:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PHY_MDIO_CHG:
|
|
||||||
if (val > 1)
|
|
||||||
goto out;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PHY_BJMPN:
|
|
||||||
if (regno > index)
|
|
||||||
goto out;
|
|
||||||
break;
|
|
||||||
case PHY_READCOUNT_EQ_SKIP:
|
|
||||||
if (index + 2 >= pa->size)
|
|
||||||
goto out;
|
|
||||||
break;
|
|
||||||
case PHY_COMP_EQ_SKIPN:
|
|
||||||
case PHY_COMP_NEQ_SKIPN:
|
|
||||||
case PHY_SKIPN:
|
|
||||||
if (index + 1 + regno >= pa->size)
|
|
||||||
goto out;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
dev_err(rtl_fw->dev, "Invalid action 0x%08x\n", action);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
out:
|
|
||||||
dev_err(rtl_fw->dev, "Out of range of firmware\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_fw_write_firmware(struct rtl8125_private *tp, struct rtl8125_fw *rtl_fw)
|
|
||||||
{
|
|
||||||
struct rtl8125_fw_phy_action *pa = &rtl_fw->phy_action;
|
|
||||||
rtl8125_fw_write_t fw_write = rtl_fw->phy_write;
|
|
||||||
rtl8125_fw_read_t fw_read = rtl_fw->phy_read;
|
|
||||||
int predata = 0, count = 0;
|
|
||||||
size_t index;
|
|
||||||
|
|
||||||
for (index = 0; index < pa->size; index++) {
|
|
||||||
u32 action = le32_to_cpu(pa->code[index]);
|
|
||||||
u32 data = action & 0x0000ffff;
|
|
||||||
u32 regno = (action & 0x0fff0000) >> 16;
|
|
||||||
enum rtl_fw_opcode opcode = action >> 28;
|
|
||||||
|
|
||||||
if (!action)
|
|
||||||
break;
|
|
||||||
|
|
||||||
switch (opcode) {
|
|
||||||
case PHY_READ:
|
|
||||||
predata = fw_read(tp, regno);
|
|
||||||
count++;
|
|
||||||
break;
|
|
||||||
case PHY_DATA_OR:
|
|
||||||
predata |= data;
|
|
||||||
break;
|
|
||||||
case PHY_DATA_AND:
|
|
||||||
predata &= data;
|
|
||||||
break;
|
|
||||||
case PHY_BJMPN:
|
|
||||||
index -= (regno + 1);
|
|
||||||
break;
|
|
||||||
case PHY_MDIO_CHG:
|
|
||||||
if (data) {
|
|
||||||
fw_write = rtl_fw->mac_mcu_write;
|
|
||||||
fw_read = rtl_fw->mac_mcu_read;
|
|
||||||
} else {
|
|
||||||
fw_write = rtl_fw->phy_write;
|
|
||||||
fw_read = rtl_fw->phy_read;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case PHY_CLEAR_READCOUNT:
|
|
||||||
count = 0;
|
|
||||||
break;
|
|
||||||
case PHY_WRITE:
|
|
||||||
fw_write(tp, regno, data);
|
|
||||||
break;
|
|
||||||
case PHY_READCOUNT_EQ_SKIP:
|
|
||||||
if (count == data)
|
|
||||||
index++;
|
|
||||||
break;
|
|
||||||
case PHY_COMP_EQ_SKIPN:
|
|
||||||
if (predata == data)
|
|
||||||
index += regno;
|
|
||||||
break;
|
|
||||||
case PHY_COMP_NEQ_SKIPN:
|
|
||||||
if (predata != data)
|
|
||||||
index += regno;
|
|
||||||
break;
|
|
||||||
case PHY_WRITE_PREVIOUS:
|
|
||||||
fw_write(tp, regno, predata);
|
|
||||||
break;
|
|
||||||
case PHY_SKIPN:
|
|
||||||
index += regno;
|
|
||||||
break;
|
|
||||||
case PHY_DELAY_MS:
|
|
||||||
mdelay(data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_fw_release_firmware(struct rtl8125_fw *rtl_fw)
|
|
||||||
{
|
|
||||||
release_firmware(rtl_fw->fw);
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_fw_request_firmware(struct rtl8125_fw *rtl_fw)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, rtl_fw->dev);
|
|
||||||
if (rc < 0)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (!rtl8125_fw_format_ok(rtl_fw) || !rtl8125_fw_data_ok(rtl_fw)) {
|
|
||||||
release_firmware(rtl_fw->fw);
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
out:
|
|
||||||
dev_err(rtl_fw->dev, "Unable to load firmware %s (%d)\n",
|
|
||||||
rtl_fw->fw_name, rc);
|
|
||||||
return rc;
|
|
||||||
}
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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 <linux/device.h>
|
|
||||||
#include <linux/firmware.h>
|
|
||||||
|
|
||||||
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 */
|
|
15150
r8125/src/r8125_n.c
15150
r8125/src/r8125_n.c
File diff suppressed because it is too large
Load diff
|
@ -1,594 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
***********************************************************************************/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include <linux/pci.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include <linux/mii.h>
|
|
||||||
#include <linux/in.h>
|
|
||||||
#include <linux/ethtool.h>
|
|
||||||
|
|
||||||
#include "r8125.h"
|
|
||||||
#include "r8125_ptp.h"
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)
|
|
||||||
static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64)
|
|
||||||
{
|
|
||||||
return *(const struct timespec *)&ts64;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct timespec64 timespec_to_timespec64(const struct timespec ts)
|
|
||||||
{
|
|
||||||
return *(const struct timespec64 *)&ts;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int _rtl8125_phc_gettime(struct rtl8125_private *tp, struct timespec64 *ts64)
|
|
||||||
{
|
|
||||||
//get local time
|
|
||||||
RTL_W16(tp, PTP_TIME_CORRECT_CMD_8125, (PTP_CMD_LATCHED_LOCAL_TIME | PTP_EXEC_CMD));
|
|
||||||
|
|
||||||
/* nanoseconds */
|
|
||||||
//0x6808[29:0]
|
|
||||||
ts64->tv_nsec = (RTL_R32(tp, PTP_SOFT_CONFIG_Time_NS_8125) & 0x3fffffff) +
|
|
||||||
tp->ptp_adjust;
|
|
||||||
|
|
||||||
/* seconds */
|
|
||||||
//0x680C[47:0]
|
|
||||||
ts64->tv_sec = RTL_R16(tp, PTP_SOFT_CONFIG_Time_S_8125 + 4);
|
|
||||||
ts64->tv_sec <<= 32;
|
|
||||||
ts64->tv_sec |= RTL_R32(tp, PTP_SOFT_CONFIG_Time_S_8125);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int _rtl8125_phc_settime(struct rtl8125_private *tp, const struct timespec64 *ts64)
|
|
||||||
{
|
|
||||||
/* nanoseconds */
|
|
||||||
//0x6808[29:0]
|
|
||||||
RTL_W32(tp, PTP_SOFT_CONFIG_Time_NS_8125, (ts64->tv_nsec & 0x3fffffff));
|
|
||||||
|
|
||||||
/* seconds */
|
|
||||||
//0x680C[47:0]
|
|
||||||
RTL_W32(tp, PTP_SOFT_CONFIG_Time_S_8125, ts64->tv_sec);
|
|
||||||
RTL_W16(tp, PTP_SOFT_CONFIG_Time_S_8125 + 4, (ts64->tv_sec >> 32));
|
|
||||||
|
|
||||||
//set local time
|
|
||||||
RTL_W16(tp, PTP_TIME_CORRECT_CMD_8125, (PTP_CMD_SET_LOCAL_TIME | PTP_EXEC_CMD));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static int _rtl8125_phc_adjtime(struct rtl8125_private *tp, s64 delta)
|
|
||||||
{
|
|
||||||
struct timespec64 now, then = ns_to_timespec64(delta);
|
|
||||||
u32 nsec;
|
|
||||||
u64 sec;
|
|
||||||
|
|
||||||
_rtl8125_phc_gettime(tp, &now);
|
|
||||||
now = timespec64_add(now, then);
|
|
||||||
|
|
||||||
nsec = now.tv_nsec & 0x3fffffff;
|
|
||||||
sec = now.tv_sec & 0x0000ffffffffffff;
|
|
||||||
|
|
||||||
/* nanoseconds */
|
|
||||||
//0x6808[29:0]
|
|
||||||
RTL_W32(tp, PTP_SOFT_CONFIG_Time_NS_8125, nsec);
|
|
||||||
|
|
||||||
/* seconds */
|
|
||||||
//0x680C[47:0]
|
|
||||||
RTL_W32(tp, PTP_SOFT_CONFIG_Time_S_8125, sec);
|
|
||||||
RTL_W16(tp, PTP_SOFT_CONFIG_Time_S_8125 + 4, (sec >> 32));
|
|
||||||
|
|
||||||
//adjust local time
|
|
||||||
//RTL_W16(tp, PTP_TIME_CORRECT_CMD_8125, (PTP_CMD_DRIFT_LOCAL_TIME | PTP_EXEC_CMD));
|
|
||||||
RTL_W16(tp, PTP_TIME_CORRECT_CMD_8125, (PTP_CMD_SET_LOCAL_TIME | PTP_EXEC_CMD));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int rtl8125_phc_adjtime(struct ptp_clock_info *ptp, s64 delta)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = container_of(ptp, struct rtl8125_private, ptp_clock_info);
|
|
||||||
unsigned long flags;
|
|
||||||
//int ret = 0;
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "phc adjust time\n");
|
|
||||||
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
//ret = _rtl8125_phc_adjtime(tp, delta);
|
|
||||||
tp->ptp_adjust += delta;
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
1ppm means every 125MHz plus 125Hz. It also means every 8ns minus 8ns*10^(-6)
|
|
||||||
|
|
||||||
1ns=2^30 sub_ns
|
|
||||||
|
|
||||||
8ns*10^(-6) = 8 * 2^30 sub_ns * 10^(-6) = 2^33 sub_ns * 10^(-6) = 8590 = 0x218E sub_ns
|
|
||||||
|
|
||||||
1ppb means every 125MHz plus 0.125Hz. It also means every 8ns minus 8ns*10^(-9)
|
|
||||||
|
|
||||||
1ns=2^30 sub_ns
|
|
||||||
|
|
||||||
8ns*10^(-9) = 8 * 2^30 sub_ns * 10^(-9) = 2^33 sub_ns * 10^(-9) = 8.59 sub_ns = 9 sub_ns
|
|
||||||
*/
|
|
||||||
static int _rtl8125_phc_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = container_of(ptp, struct rtl8125_private, ptp_clock_info);
|
|
||||||
bool negative = false;
|
|
||||||
u32 sub_ns;
|
|
||||||
|
|
||||||
if (ppb < 0) {
|
|
||||||
negative = true;
|
|
||||||
ppb = -ppb;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub_ns = ppb * 9;
|
|
||||||
if (negative) {
|
|
||||||
sub_ns = -sub_ns;
|
|
||||||
sub_ns &= 0x3fffffff;
|
|
||||||
sub_ns |= PTP_ADJUST_TIME_NS_NEGATIVE;
|
|
||||||
} else
|
|
||||||
sub_ns &= 0x3fffffff;
|
|
||||||
|
|
||||||
/* nanoseconds */
|
|
||||||
//0x6808[29:0]
|
|
||||||
RTL_W32(tp, PTP_SOFT_CONFIG_Time_NS_8125, sub_ns);
|
|
||||||
|
|
||||||
//adjust local time
|
|
||||||
RTL_W16(tp, PTP_TIME_CORRECT_CMD_8125, (PTP_CMD_DRIFT_LOCAL_TIME | PTP_EXEC_CMD));
|
|
||||||
//RTL_W16(tp, PTP_TIME_CORRECT_CMD_8125, (PTP_CMD_SET_LOCAL_TIME | PTP_EXEC_CMD));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta)
|
|
||||||
{
|
|
||||||
//struct rtl8125_private *tp = container_of(ptp, struct rtl8125_private, ptp_clock_info);
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "phc adjust freq\n");
|
|
||||||
|
|
||||||
if (delta > ptp->max_adj || delta < -ptp->max_adj)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
_rtl8125_phc_adjfreq(ptp, delta);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_phc_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts64)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = container_of(ptp, struct rtl8125_private, ptp_clock_info);
|
|
||||||
unsigned long flags;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "phc get ts\n");
|
|
||||||
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
ret = _rtl8125_phc_gettime(tp, ts64);
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_phc_settime(struct ptp_clock_info *ptp,
|
|
||||||
const struct timespec64 *ts64)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = container_of(ptp, struct rtl8125_private, ptp_clock_info);
|
|
||||||
unsigned long flags;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "phc set ts\n");
|
|
||||||
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
ret = _rtl8125_phc_settime(tp, ts64);
|
|
||||||
tp->ptp_adjust = 0;
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_phc_enable(struct ptp_clock_info *ptp,
|
|
||||||
struct ptp_clock_request *rq, int on)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = container_of(ptp, struct rtl8125_private, ptp_clock_info);
|
|
||||||
unsigned long flags;
|
|
||||||
u16 ptp_ctrl;
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "phc enable type %x on %d\n", rq->type, on);
|
|
||||||
|
|
||||||
switch (rq->type) {
|
|
||||||
case PTP_CLK_REQ_PPS:
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
ptp_ctrl = RTL_R16(tp, PTP_CTRL_8125);
|
|
||||||
ptp_ctrl &= ~BIT_15;
|
|
||||||
if (on)
|
|
||||||
ptp_ctrl |= BIT_14;
|
|
||||||
else
|
|
||||||
ptp_ctrl &= ~BIT_14;
|
|
||||||
RTL_W16(tp, PTP_CTRL_8125, ptp_ctrl);
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_get_ts_info(struct net_device *netdev,
|
|
||||||
struct ethtool_ts_info *info)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(netdev);
|
|
||||||
|
|
||||||
/* we always support timestamping disabled */
|
|
||||||
info->rx_filters = BIT(HWTSTAMP_FILTER_NONE);
|
|
||||||
|
|
||||||
if (tp->HwSuppPtpVer == 0)
|
|
||||||
return ethtool_op_get_ts_info(netdev, info);
|
|
||||||
|
|
||||||
info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
|
|
||||||
SOF_TIMESTAMPING_RX_SOFTWARE |
|
|
||||||
SOF_TIMESTAMPING_SOFTWARE |
|
|
||||||
SOF_TIMESTAMPING_TX_HARDWARE |
|
|
||||||
SOF_TIMESTAMPING_RX_HARDWARE |
|
|
||||||
SOF_TIMESTAMPING_RAW_HARDWARE;
|
|
||||||
|
|
||||||
if (tp->ptp_clock)
|
|
||||||
info->phc_index = ptp_clock_index(tp->ptp_clock);
|
|
||||||
else
|
|
||||||
info->phc_index = -1;
|
|
||||||
|
|
||||||
info->tx_types = BIT(HWTSTAMP_TX_OFF) | BIT(HWTSTAMP_TX_ON);
|
|
||||||
|
|
||||||
info->rx_filters = BIT(HWTSTAMP_FILTER_NONE) |
|
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_EVENT) |
|
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
|
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_SYNC) |
|
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
|
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_DELAY_REQ) |
|
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct ptp_clock_info rtl_ptp_clock_info = {
|
|
||||||
.owner = THIS_MODULE,
|
|
||||||
.n_alarm = 0,
|
|
||||||
.n_ext_ts = 0,
|
|
||||||
.n_per_out = 0,
|
|
||||||
.n_pins = 0,
|
|
||||||
.pps = 1,
|
|
||||||
.adjfreq = rtl8125_phc_adjfreq,
|
|
||||||
.adjtime = rtl8125_phc_adjtime,
|
|
||||||
.gettime64 = rtl8125_phc_gettime,
|
|
||||||
.settime64 = rtl8125_phc_settime,
|
|
||||||
.enable = rtl8125_phc_enable,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int rtl8125_get_tx_ptp_pkt_tstamp(struct rtl8125_private *tp, struct timespec64 *ts64)
|
|
||||||
{
|
|
||||||
return _rtl8125_phc_gettime(tp, ts64);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8125_ptp_tx_hwtstamp(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
struct sk_buff *skb = tp->ptp_tx_skb;
|
|
||||||
struct skb_shared_hwtstamps shhwtstamps = {0};
|
|
||||||
struct timespec64 ts64;
|
|
||||||
|
|
||||||
RTL_W8(tp, PTP_ISR_8125, PTP_ISR_TOK | PTP_ISR_TER);
|
|
||||||
|
|
||||||
rtl8125_get_tx_ptp_pkt_tstamp(tp, &ts64);
|
|
||||||
|
|
||||||
/* Upper 32 bits contain s, lower 32 bits contain ns. */
|
|
||||||
shhwtstamps.hwtstamp = ktime_set(ts64.tv_sec,
|
|
||||||
ts64.tv_nsec);
|
|
||||||
|
|
||||||
/* Clear the lock early before calling skb_tstamp_tx so that
|
|
||||||
* applications are not woken up before the lock bit is clear. We use
|
|
||||||
* a copy of the skb pointer to ensure other threads can't change it
|
|
||||||
* while we're notifying the stack.
|
|
||||||
*/
|
|
||||||
tp->ptp_tx_skb = NULL;
|
|
||||||
|
|
||||||
/* Notify the stack and free the skb after we've unlocked */
|
|
||||||
skb_tstamp_tx(skb, &shhwtstamps);
|
|
||||||
dev_kfree_skb_any(skb);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define RTL8125_PTP_TX_TIMEOUT (HZ * 15)
|
|
||||||
static void rtl8125_ptp_tx_work(struct work_struct *work)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = container_of(work, struct rtl8125_private,
|
|
||||||
ptp_tx_work);
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
|
|
||||||
if (!tp->ptp_tx_skb)
|
|
||||||
goto Exit;
|
|
||||||
|
|
||||||
if (time_is_before_jiffies(tp->ptp_tx_start +
|
|
||||||
RTL8125_PTP_TX_TIMEOUT)) {
|
|
||||||
dev_kfree_skb_any(tp->ptp_tx_skb);
|
|
||||||
tp->ptp_tx_skb = NULL;
|
|
||||||
tp->tx_hwtstamp_timeouts++;
|
|
||||||
/* Clear the tx valid bit in TSYNCTXCTL register to enable
|
|
||||||
* interrupt
|
|
||||||
*/
|
|
||||||
RTL_W8(tp, PTP_ISR_8125, PTP_ISR_TOK | PTP_ISR_TER);
|
|
||||||
goto Exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RTL_R8(tp, PTP_ISR_8125) & (PTP_ISR_TOK))
|
|
||||||
rtl8125_ptp_tx_hwtstamp(tp);
|
|
||||||
else
|
|
||||||
/* reschedule to check later */
|
|
||||||
schedule_work(&tp->ptp_tx_work);
|
|
||||||
|
|
||||||
Exit:
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_hwtstamp_enable(struct rtl8125_private *tp, bool enable)
|
|
||||||
{
|
|
||||||
RTL_W16(tp, PTP_CTRL_8125, 0);
|
|
||||||
if (enable) {
|
|
||||||
u16 ptp_ctrl;
|
|
||||||
struct timespec64 ts64;
|
|
||||||
|
|
||||||
//clear ptp isr
|
|
||||||
RTL_W8(tp, PTP_ISR_8125, 0xff);
|
|
||||||
//ptp source 0:gphy 1:mac
|
|
||||||
rtl8125_mac_ocp_write(tp, 0xDC00, rtl8125_mac_ocp_read(tp, 0xDC00) | BIT_6);
|
|
||||||
//enable ptp
|
|
||||||
ptp_ctrl = (BIT_0 | BIT_3 | BIT_4 | BIT_6 | BIT_10 | BIT_12 | BIT_13);
|
|
||||||
if (tp->ptp_master_mode) {
|
|
||||||
ptp_ctrl &= ~BIT_13;
|
|
||||||
ptp_ctrl |= BIT_1;
|
|
||||||
}
|
|
||||||
RTL_W16(tp, PTP_CTRL_8125, ptp_ctrl);
|
|
||||||
|
|
||||||
//set system time
|
|
||||||
/*
|
|
||||||
if (ktime_to_timespec64_cond(ktime_get_real(), &ts64))
|
|
||||||
_rtl8125_phc_settime(tp, timespec64_to_timespec(ts64));
|
|
||||||
*/
|
|
||||||
ktime_get_real_ts64(&ts64);
|
|
||||||
ts64.tv_nsec += tp->ptp_adjust;
|
|
||||||
_rtl8125_phc_settime(tp, &ts64);
|
|
||||||
tp->ptp_adjust = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long rtl8125_ptp_create_clock(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
struct net_device *netdev = tp->dev;
|
|
||||||
long err;
|
|
||||||
|
|
||||||
if (!IS_ERR_OR_NULL(tp->ptp_clock))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (tp->HwSuppPtpVer == 0) {
|
|
||||||
tp->ptp_clock = NULL;
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
tp->ptp_clock_info = rtl_ptp_clock_info;
|
|
||||||
snprintf(tp->ptp_clock_info.name, sizeof(tp->ptp_clock_info.name),
|
|
||||||
"%pm", tp->dev->dev_addr);
|
|
||||||
tp->ptp_clock_info.max_adj = 119304647;
|
|
||||||
tp->ptp_clock = ptp_clock_register(&tp->ptp_clock_info, &tp->pci_dev->dev);
|
|
||||||
if (IS_ERR(tp->ptp_clock)) {
|
|
||||||
err = PTR_ERR(tp->ptp_clock);
|
|
||||||
tp->ptp_clock = NULL;
|
|
||||||
netif_err(tp, drv, tp->dev, "ptp_clock_register failed\n");
|
|
||||||
return err;
|
|
||||||
} else
|
|
||||||
netif_info(tp, drv, tp->dev, "registered PHC device on %s\n", netdev->name);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_ptp_reset(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
if (!tp->ptp_clock)
|
|
||||||
return;
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "reset PHC clock\n");
|
|
||||||
|
|
||||||
rtl8125_hwtstamp_enable(tp, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_ptp_init(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
/* obtain a PTP device, or re-use an existing device */
|
|
||||||
if (rtl8125_ptp_create_clock(tp))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* we have a clock so we can initialize work now */
|
|
||||||
INIT_WORK(&tp->ptp_tx_work, rtl8125_ptp_tx_work);
|
|
||||||
|
|
||||||
tp->ptp_adjust = 0;
|
|
||||||
|
|
||||||
/* reset the PTP related hardware bits */
|
|
||||||
rtl8125_ptp_reset(tp);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_ptp_suspend(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
if (!tp->ptp_clock)
|
|
||||||
return;
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "suspend PHC clock\n");
|
|
||||||
|
|
||||||
rtl8125_hwtstamp_enable(tp, false);
|
|
||||||
|
|
||||||
/* ensure that we cancel any pending PTP Tx work item in progress */
|
|
||||||
cancel_work_sync(&tp->ptp_tx_work);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_ptp_stop(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
struct net_device *netdev = tp->dev;
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "stop PHC clock\n");
|
|
||||||
|
|
||||||
/* first, suspend PTP activity */
|
|
||||||
rtl8125_ptp_suspend(tp);
|
|
||||||
|
|
||||||
/* disable the PTP clock device */
|
|
||||||
if (tp->ptp_clock) {
|
|
||||||
ptp_clock_unregister(tp->ptp_clock);
|
|
||||||
tp->ptp_clock = NULL;
|
|
||||||
netif_info(tp, drv, tp->dev, "removed PHC on %s\n",
|
|
||||||
netdev->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_set_tstamp(struct net_device *netdev, struct ifreq *ifr)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(netdev);
|
|
||||||
struct hwtstamp_config config;
|
|
||||||
bool hwtstamp = 0;
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "ptp set ts\n");
|
|
||||||
|
|
||||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
if (config.flags)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
switch (config.tx_type) {
|
|
||||||
case HWTSTAMP_TX_ON:
|
|
||||||
hwtstamp = 1;
|
|
||||||
case HWTSTAMP_TX_OFF:
|
|
||||||
break;
|
|
||||||
case HWTSTAMP_TX_ONESTEP_SYNC:
|
|
||||||
default:
|
|
||||||
return -ERANGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (config.rx_filter) {
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_EVENT:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_SYNC:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
|
|
||||||
case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
|
|
||||||
config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
|
|
||||||
hwtstamp = 1;
|
|
||||||
case HWTSTAMP_FILTER_NONE:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -ERANGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tp->hwtstamp_config.tx_type != config.tx_type ||
|
|
||||||
tp->hwtstamp_config.rx_filter != config.rx_filter) {
|
|
||||||
tp->hwtstamp_config = config;
|
|
||||||
rtl8125_hwtstamp_enable(tp, hwtstamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
return copy_to_user(ifr->ifr_data, &config,
|
|
||||||
sizeof(config)) ? -EFAULT : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_get_tstamp(struct net_device *netdev, struct ifreq *ifr)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(netdev);
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "ptp get ts\n");
|
|
||||||
|
|
||||||
return copy_to_user(ifr->ifr_data, &tp->hwtstamp_config,
|
|
||||||
sizeof(tp->hwtstamp_config)) ? -EFAULT : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(netdev);
|
|
||||||
int ret;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
//netif_info(tp, drv, tp->dev, "ptp ioctl\n");
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
switch (cmd) {
|
|
||||||
#ifdef ENABLE_PTP_SUPPORT
|
|
||||||
case SIOCSHWTSTAMP:
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
ret = rtl8125_set_tstamp(netdev, ifr);
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
break;
|
|
||||||
case SIOCGHWTSTAMP:
|
|
||||||
spin_lock_irqsave(&tp->lock, flags);
|
|
||||||
ret = rtl8125_get_tstamp(netdev, ifr);
|
|
||||||
spin_unlock_irqrestore(&tp->lock, flags);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_rx_ptp_pktstamp(struct rtl8125_private *tp, struct sk_buff *skb,
|
|
||||||
struct RxDescV3 *descv3)
|
|
||||||
{
|
|
||||||
time64_t tv_sec;
|
|
||||||
long tv_nsec;
|
|
||||||
|
|
||||||
tv_sec = le32_to_cpu(descv3->RxDescTimeStamp.TimeStampHigh) +
|
|
||||||
((u64)le32_to_cpu(descv3->RxDescPTPDDWord4.TimeStampHHigh) << 32);
|
|
||||||
tv_nsec = le32_to_cpu(descv3->RxDescTimeStamp.TimeStampLow) + tp->ptp_adjust;
|
|
||||||
|
|
||||||
skb_hwtstamps(skb)->hwtstamp = ktime_set(tv_sec, tv_nsec);
|
|
||||||
}
|
|
|
@ -1,81 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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_PTP_H
|
|
||||||
#define _LINUX_rtl8125_PTP_H
|
|
||||||
|
|
||||||
#include <linux/ktime.h>
|
|
||||||
#include <linux/timecounter.h>
|
|
||||||
#include <linux/net_tstamp.h>
|
|
||||||
#include <linux/ptp_clock_kernel.h>
|
|
||||||
#include <linux/ptp_classify.h>
|
|
||||||
|
|
||||||
struct rtl8125_ptp_info {
|
|
||||||
s64 time_sec;
|
|
||||||
u32 time_ns;
|
|
||||||
u16 ts_info;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef _STRUCT_TIMESPEC
|
|
||||||
#define _STRUCT_TIMESPEC
|
|
||||||
struct timespec {
|
|
||||||
__kernel_old_time_t tv_sec; /* seconds */
|
|
||||||
long tv_nsec; /* nanoseconds */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum PTP_CMD_TYPE {
|
|
||||||
PTP_CMD_SET_LOCAL_TIME = 0,
|
|
||||||
PTP_CMD_DRIFT_LOCAL_TIME,
|
|
||||||
PTP_CMD_LATCHED_LOCAL_TIME,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct rtl8125_private;
|
|
||||||
struct RxDescV3;
|
|
||||||
|
|
||||||
int rtl8125_get_ts_info(struct net_device *netdev,
|
|
||||||
struct ethtool_ts_info *info);
|
|
||||||
|
|
||||||
void rtl8125_ptp_reset(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_ptp_init(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_ptp_suspend(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_ptp_stop(struct rtl8125_private *tp);
|
|
||||||
|
|
||||||
int rtl8125_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
|
|
||||||
|
|
||||||
void rtl8125_rx_ptp_pktstamp(struct rtl8125_private *tp, struct sk_buff *skb,
|
|
||||||
struct RxDescV3 *descv3);
|
|
||||||
|
|
||||||
#endif /* _LINUX_rtl8125_PTP_H */
|
|
|
@ -1,118 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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_R8125_REALWOW_H
|
|
||||||
#define _LINUX_R8125_REALWOW_H
|
|
||||||
|
|
||||||
#define SIOCDEVPRIVATE_RTLREALWOW SIOCDEVPRIVATE+3
|
|
||||||
|
|
||||||
#define MAX_RealWoW_KCP_SIZE (100)
|
|
||||||
#define MAX_RealWoW_Payload (64)
|
|
||||||
|
|
||||||
#define KA_TX_PACKET_SIZE (100)
|
|
||||||
#define KA_WAKEUP_PATTERN_SIZE (120)
|
|
||||||
|
|
||||||
//HwSuppKeepAliveOffloadVer
|
|
||||||
#define HW_SUPPORT_KCP_OFFLOAD(_M) ((_M)->HwSuppKCPOffloadVer > 0)
|
|
||||||
|
|
||||||
enum rtl_realwow_cmd {
|
|
||||||
|
|
||||||
RTL_REALWOW_SET_KCP_DISABLE=0,
|
|
||||||
RTL_REALWOW_SET_KCP_INFO,
|
|
||||||
RTL_REALWOW_SET_KCP_CONTENT,
|
|
||||||
|
|
||||||
RTL_REALWOW_SET_KCP_ACKPKTINFO,
|
|
||||||
RTL_REALWOW_SET_KCP_WPINFO,
|
|
||||||
RTL_REALWOW_SET_KCPDHCP_TIMEOUT,
|
|
||||||
|
|
||||||
RTLT_REALWOW_COMMAND_INVALID
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl_realwow_ioctl_struct {
|
|
||||||
__u32 cmd;
|
|
||||||
__u32 offset;
|
|
||||||
__u32 len;
|
|
||||||
union {
|
|
||||||
__u32 data;
|
|
||||||
void *data_buffer;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _MP_KCPInfo {
|
|
||||||
u8 DIPv4[4];
|
|
||||||
u8 MacID[6];
|
|
||||||
u16 UdpPort[2];
|
|
||||||
u8 PKTLEN[2];
|
|
||||||
|
|
||||||
u16 ackLostCnt;
|
|
||||||
u8 KCP_WakePattern[MAX_RealWoW_Payload];
|
|
||||||
u8 KCP_AckPacket[MAX_RealWoW_Payload];
|
|
||||||
u32 KCP_interval;
|
|
||||||
u8 KCP_WakePattern_Len;
|
|
||||||
u8 KCP_AckPacket_Len;
|
|
||||||
u8 KCP_TxPacket[2][KA_TX_PACKET_SIZE];
|
|
||||||
} MP_KCP_INFO, *PMP_KCP_INFO;
|
|
||||||
|
|
||||||
typedef struct _KCPInfo {
|
|
||||||
u32 nId; // = id
|
|
||||||
u8 DIPv4[4];
|
|
||||||
u8 MacID[6];
|
|
||||||
u16 UdpPort;
|
|
||||||
u16 PKTLEN;
|
|
||||||
} KCPInfo, *PKCPInfo;
|
|
||||||
|
|
||||||
typedef struct _KCPContent {
|
|
||||||
u32 id; // = id
|
|
||||||
u32 mSec; // = msec
|
|
||||||
u32 size; // =size
|
|
||||||
u8 bPacket[MAX_RealWoW_KCP_SIZE]; // put packet here
|
|
||||||
} KCPContent, *PKCPContent;
|
|
||||||
|
|
||||||
typedef struct _RealWoWAckPktInfo {
|
|
||||||
u16 ackLostCnt;
|
|
||||||
u16 patterntSize;
|
|
||||||
u8 pattern[MAX_RealWoW_Payload];
|
|
||||||
} RealWoWAckPktInfo,*PRealWoWAckPktInfo;
|
|
||||||
|
|
||||||
typedef struct _RealWoWWPInfo {
|
|
||||||
u16 patterntSize;
|
|
||||||
u8 pattern[MAX_RealWoW_Payload];
|
|
||||||
} RealWoWWPInfo,*PRealWoWWPInfo;
|
|
||||||
|
|
||||||
int rtl8125_realwow_ioctl(struct net_device *dev, struct ifreq *ifr);
|
|
||||||
void rtl8125_realwow_hw_init(struct net_device *dev);
|
|
||||||
void rtl8125_get_realwow_hw_version(struct net_device *dev);
|
|
||||||
void rtl8125_set_realwow_d3_para(struct net_device *dev);
|
|
||||||
|
|
||||||
#endif /* _LINUX_R8125_REALWOW_H */
|
|
|
@ -1,481 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
/*
|
|
||||||
################################################################################
|
|
||||||
#
|
|
||||||
# r8168 is the Linux device driver released for Realtek Gigabit 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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
***********************************************************************************/
|
|
||||||
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include "r8125.h"
|
|
||||||
|
|
||||||
enum rtl8125_rss_register_content {
|
|
||||||
/* RSS */
|
|
||||||
RSS_CTRL_TCP_IPV4_SUPP = (1 << 0),
|
|
||||||
RSS_CTRL_IPV4_SUPP = (1 << 1),
|
|
||||||
RSS_CTRL_TCP_IPV6_SUPP = (1 << 2),
|
|
||||||
RSS_CTRL_IPV6_SUPP = (1 << 3),
|
|
||||||
RSS_HALF_SUPP = (1 << 7),
|
|
||||||
RSS_CTRL_UDP_IPV4_SUPP = (1 << 11),
|
|
||||||
RSS_CTRL_UDP_IPV6_SUPP = (1 << 12),
|
|
||||||
RSS_QUAD_CPU_EN = (1 << 16),
|
|
||||||
RSS_HQ_Q_SUP_R = (1 << 31),
|
|
||||||
};
|
|
||||||
|
|
||||||
static int rtl8125_get_rss_hash_opts(struct rtl8125_private *tp,
|
|
||||||
struct ethtool_rxnfc *cmd)
|
|
||||||
{
|
|
||||||
cmd->data = 0;
|
|
||||||
|
|
||||||
/* Report default options for RSS */
|
|
||||||
switch (cmd->flow_type) {
|
|
||||||
case TCP_V4_FLOW:
|
|
||||||
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
|
|
||||||
/* fallthrough */
|
|
||||||
case UDP_V4_FLOW:
|
|
||||||
if (tp->rss_flags & RTL_8125_RSS_FLAG_HASH_UDP_IPV4)
|
|
||||||
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
|
|
||||||
/* fallthrough */
|
|
||||||
case IPV4_FLOW:
|
|
||||||
cmd->data |= RXH_IP_SRC | RXH_IP_DST;
|
|
||||||
break;
|
|
||||||
case TCP_V6_FLOW:
|
|
||||||
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
|
|
||||||
/* fallthrough */
|
|
||||||
case UDP_V6_FLOW:
|
|
||||||
if (tp->rss_flags & RTL_8125_RSS_FLAG_HASH_UDP_IPV6)
|
|
||||||
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
|
|
||||||
/* fallthrough */
|
|
||||||
case IPV6_FLOW:
|
|
||||||
cmd->data |= RXH_IP_SRC | RXH_IP_DST;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
|
|
||||||
u32 *rule_locs)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(dev);
|
|
||||||
int ret = -EOPNOTSUPP;
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss get rxnfc\n");
|
|
||||||
|
|
||||||
if (!(dev->features & NETIF_F_RXHASH))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
switch (cmd->cmd) {
|
|
||||||
case ETHTOOL_GRXRINGS:
|
|
||||||
cmd->data = rtl8125_tot_rx_rings(tp);
|
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
case ETHTOOL_GRXFH:
|
|
||||||
ret = rtl8125_get_rss_hash_opts(tp, cmd);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 rtl8125_rss_indir_tbl_entries(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
return tp->HwSuppIndirTblEntries;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define RSS_MASK_BITS_OFFSET (8)
|
|
||||||
#define RSS_CPU_NUM_OFFSET (16)
|
|
||||||
#define RTL8125_UDP_RSS_FLAGS (RTL_8125_RSS_FLAG_HASH_UDP_IPV4 | \
|
|
||||||
RTL_8125_RSS_FLAG_HASH_UDP_IPV6)
|
|
||||||
static int _rtl8125_set_rss_hash_opt(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u32 rss_flags = tp->rss_flags;
|
|
||||||
u32 hash_mask_len;
|
|
||||||
u32 rss_ctrl;
|
|
||||||
|
|
||||||
rss_ctrl = ilog2(rtl8125_tot_rx_rings(tp));
|
|
||||||
rss_ctrl &= (BIT_0 | BIT_1 | BIT_2);
|
|
||||||
rss_ctrl <<= RSS_CPU_NUM_OFFSET;
|
|
||||||
|
|
||||||
/* Perform hash on these packet types */
|
|
||||||
rss_ctrl |= RSS_CTRL_TCP_IPV4_SUPP
|
|
||||||
| RSS_CTRL_IPV4_SUPP
|
|
||||||
| RSS_CTRL_IPV6_SUPP
|
|
||||||
| RSS_CTRL_TCP_IPV6_SUPP;
|
|
||||||
|
|
||||||
if (rss_flags & RTL_8125_RSS_FLAG_HASH_UDP_IPV4)
|
|
||||||
rss_ctrl |= RSS_CTRL_UDP_IPV4_SUPP;
|
|
||||||
|
|
||||||
if (rss_flags & RTL_8125_RSS_FLAG_HASH_UDP_IPV6)
|
|
||||||
rss_ctrl |= RSS_CTRL_UDP_IPV6_SUPP;
|
|
||||||
|
|
||||||
hash_mask_len = ilog2(rtl8125_rss_indir_tbl_entries(tp));
|
|
||||||
hash_mask_len &= (BIT_0 | BIT_1 | BIT_2);
|
|
||||||
rss_ctrl |= hash_mask_len << RSS_MASK_BITS_OFFSET;
|
|
||||||
|
|
||||||
RTL_W32(tp, RSS_CTRL_8125, rss_ctrl);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rtl8125_set_rss_hash_opt(struct rtl8125_private *tp,
|
|
||||||
struct ethtool_rxnfc *nfc)
|
|
||||||
{
|
|
||||||
u32 rss_flags = tp->rss_flags;
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss set hash\n");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RSS does not support anything other than hashing
|
|
||||||
* to queues on src and dst IPs and ports
|
|
||||||
*/
|
|
||||||
if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST |
|
|
||||||
RXH_L4_B_0_1 | RXH_L4_B_2_3))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
switch (nfc->flow_type) {
|
|
||||||
case TCP_V4_FLOW:
|
|
||||||
case TCP_V6_FLOW:
|
|
||||||
if (!(nfc->data & RXH_IP_SRC) ||
|
|
||||||
!(nfc->data & RXH_IP_DST) ||
|
|
||||||
!(nfc->data & RXH_L4_B_0_1) ||
|
|
||||||
!(nfc->data & RXH_L4_B_2_3))
|
|
||||||
return -EINVAL;
|
|
||||||
break;
|
|
||||||
case UDP_V4_FLOW:
|
|
||||||
if (!(nfc->data & RXH_IP_SRC) ||
|
|
||||||
!(nfc->data & RXH_IP_DST))
|
|
||||||
return -EINVAL;
|
|
||||||
switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
|
|
||||||
case 0:
|
|
||||||
rss_flags &= ~RTL_8125_RSS_FLAG_HASH_UDP_IPV4;
|
|
||||||
break;
|
|
||||||
case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
|
|
||||||
rss_flags |= RTL_8125_RSS_FLAG_HASH_UDP_IPV4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case UDP_V6_FLOW:
|
|
||||||
if (!(nfc->data & RXH_IP_SRC) ||
|
|
||||||
!(nfc->data & RXH_IP_DST))
|
|
||||||
return -EINVAL;
|
|
||||||
switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
|
|
||||||
case 0:
|
|
||||||
rss_flags &= ~RTL_8125_RSS_FLAG_HASH_UDP_IPV6;
|
|
||||||
break;
|
|
||||||
case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
|
|
||||||
rss_flags |= RTL_8125_RSS_FLAG_HASH_UDP_IPV6;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SCTP_V4_FLOW:
|
|
||||||
case AH_ESP_V4_FLOW:
|
|
||||||
case AH_V4_FLOW:
|
|
||||||
case ESP_V4_FLOW:
|
|
||||||
case SCTP_V6_FLOW:
|
|
||||||
case AH_ESP_V6_FLOW:
|
|
||||||
case AH_V6_FLOW:
|
|
||||||
case ESP_V6_FLOW:
|
|
||||||
case IP_USER_FLOW:
|
|
||||||
case ETHER_FLOW:
|
|
||||||
/* RSS is not supported for these protocols */
|
|
||||||
if (nfc->data) {
|
|
||||||
netif_err(tp, drv, tp->dev, "Command parameters not supported\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if we changed something we need to update flags */
|
|
||||||
if (rss_flags != tp->rss_flags) {
|
|
||||||
u32 rss_ctrl = RTL_R32(tp, RSS_CTRL_8125);
|
|
||||||
|
|
||||||
if ((rss_flags & RTL8125_UDP_RSS_FLAGS) &&
|
|
||||||
!(tp->rss_flags & RTL8125_UDP_RSS_FLAGS))
|
|
||||||
netdev_warn(tp->dev,
|
|
||||||
"enabling UDP RSS: fragmented packets may "
|
|
||||||
"arrive out of order to the stack above\n");
|
|
||||||
|
|
||||||
tp->rss_flags = rss_flags;
|
|
||||||
|
|
||||||
/* Perform hash on these packet types */
|
|
||||||
rss_ctrl |= RSS_CTRL_TCP_IPV4_SUPP
|
|
||||||
| RSS_CTRL_IPV4_SUPP
|
|
||||||
| RSS_CTRL_IPV6_SUPP
|
|
||||||
| RSS_CTRL_TCP_IPV6_SUPP;
|
|
||||||
|
|
||||||
rss_ctrl &= ~(RSS_CTRL_UDP_IPV4_SUPP |
|
|
||||||
RSS_CTRL_UDP_IPV6_SUPP);
|
|
||||||
|
|
||||||
if (rss_flags & RTL_8125_RSS_FLAG_HASH_UDP_IPV4)
|
|
||||||
rss_ctrl |= RSS_CTRL_UDP_IPV4_SUPP;
|
|
||||||
|
|
||||||
if (rss_flags & RTL_8125_RSS_FLAG_HASH_UDP_IPV6)
|
|
||||||
rss_ctrl |= RSS_CTRL_UDP_IPV6_SUPP;
|
|
||||||
|
|
||||||
RTL_W32(tp, RSS_CTRL_8125, rss_ctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(dev);
|
|
||||||
int ret = -EOPNOTSUPP;
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss set rxnfc\n");
|
|
||||||
|
|
||||||
if (!(dev->features & NETIF_F_RXHASH))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
switch (cmd->cmd) {
|
|
||||||
case ETHTOOL_SRXFH:
|
|
||||||
ret = rtl8125_set_rss_hash_opt(tp, cmd);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static u32 _rtl8125_get_rxfh_key_size(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
return sizeof(tp->rss_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 rtl8125_get_rxfh_key_size(struct net_device *dev)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(dev);
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss get key size\n");
|
|
||||||
|
|
||||||
if (!(dev->features & NETIF_F_RXHASH))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return _rtl8125_get_rxfh_key_size(tp);
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 rtl8125_rss_indir_size(struct net_device *dev)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(dev);
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss get indir tbl size\n");
|
|
||||||
|
|
||||||
if (!(dev->features & NETIF_F_RXHASH))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return rtl8125_rss_indir_tbl_entries(tp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8125_get_reta(struct rtl8125_private *tp, u32 *indir)
|
|
||||||
{
|
|
||||||
int i, reta_size = rtl8125_rss_indir_tbl_entries(tp);
|
|
||||||
|
|
||||||
for (i = 0; i < reta_size; i++)
|
|
||||||
indir[i] = tp->rss_indir_tbl[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_get_rxfh(struct net_device *dev, u32 *indir, u8 *key,
|
|
||||||
u8 *hfunc)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(dev);
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss get rxfh\n");
|
|
||||||
|
|
||||||
if (!(dev->features & NETIF_F_RXHASH))
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
if (hfunc)
|
|
||||||
*hfunc = ETH_RSS_HASH_TOP;
|
|
||||||
|
|
||||||
if (indir)
|
|
||||||
rtl8125_get_reta(tp, indir);
|
|
||||||
|
|
||||||
if (key)
|
|
||||||
memcpy(key, tp->rss_key, rtl8125_get_rxfh_key_size(dev));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static u32 rtl8125_rss_key_reg(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
return RSS_KEY_8125;
|
|
||||||
}
|
|
||||||
|
|
||||||
static u32 rtl8125_rss_indir_tbl_reg(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
return RSS_INDIRECTION_TBL_8125_V2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8125_store_reta(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u16 indir_tbl_reg = rtl8125_rss_indir_tbl_reg(tp);
|
|
||||||
u32 i, reta_entries = rtl8125_rss_indir_tbl_entries(tp);
|
|
||||||
u32 reta = 0;
|
|
||||||
u8 *indir_tbl = tp->rss_indir_tbl;
|
|
||||||
|
|
||||||
/* Write redirection table to HW */
|
|
||||||
for (i = 0; i < reta_entries; i++) {
|
|
||||||
reta |= indir_tbl[i] << (i & 0x3) * 8;
|
|
||||||
if ((i & 3) == 3) {
|
|
||||||
RTL_W32(tp, indir_tbl_reg, reta);
|
|
||||||
|
|
||||||
indir_tbl_reg += 4;
|
|
||||||
reta = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8125_store_rss_key(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
const u16 rss_key_reg = rtl8125_rss_key_reg(tp);
|
|
||||||
u32 i, rss_key_size = _rtl8125_get_rxfh_key_size(tp);
|
|
||||||
u32 *rss_key = (u32*)tp->rss_key;
|
|
||||||
|
|
||||||
/* Write redirection table to HW */
|
|
||||||
for (i = 0; i < rss_key_size; i+=4)
|
|
||||||
RTL_W32(tp, rss_key_reg + i, *rss_key++);
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_set_rxfh(struct net_device *dev, const u32 *indir,
|
|
||||||
const u8 *key, const u8 hfunc)
|
|
||||||
{
|
|
||||||
struct rtl8125_private *tp = netdev_priv(dev);
|
|
||||||
int i;
|
|
||||||
u32 reta_entries = rtl8125_rss_indir_tbl_entries(tp);
|
|
||||||
|
|
||||||
netif_info(tp, drv, tp->dev, "rss set rxfh\n");
|
|
||||||
|
|
||||||
/* We require at least one supported parameter to be changed and no
|
|
||||||
* change in any of the unsupported parameters
|
|
||||||
*/
|
|
||||||
if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
/* Fill out the redirection table */
|
|
||||||
if (indir) {
|
|
||||||
int max_queues = tp->num_rx_rings;
|
|
||||||
|
|
||||||
/* Verify user input. */
|
|
||||||
for (i = 0; i < reta_entries; i++)
|
|
||||||
if (indir[i] >= max_queues)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
for (i = 0; i < reta_entries; i++)
|
|
||||||
tp->rss_indir_tbl[i] = indir[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fill out the rss hash key */
|
|
||||||
if (key)
|
|
||||||
memcpy(tp->rss_key, key, rtl8125_get_rxfh_key_size(dev));
|
|
||||||
|
|
||||||
rtl8125_store_reta(tp);
|
|
||||||
|
|
||||||
rtl8125_store_rss_key(tp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static u32 rtl8125_get_rx_desc_hash(struct rtl8125_private *tp,
|
|
||||||
struct RxDescV3 *descv3)
|
|
||||||
{
|
|
||||||
return le32_to_cpu(descv3->RxDescNormalDDWord2.RSSResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define RXS_8125B_RSS_UDP BIT(9)
|
|
||||||
#define RXS_8125_RSS_IPV4 BIT(10)
|
|
||||||
#define RXS_8125_RSS_IPV6 BIT(12)
|
|
||||||
#define RXS_8125_RSS_TCP BIT(13)
|
|
||||||
#define RTL8125_RXS_RSS_L3_TYPE_MASK (RXS_8125_RSS_IPV4 | RXS_8125_RSS_IPV6)
|
|
||||||
#define RTL8125_RXS_RSS_L4_TYPE_MASK (RXS_8125_RSS_TCP | RXS_8125B_RSS_UDP)
|
|
||||||
void rtl8125_rx_hash(struct rtl8125_private *tp,
|
|
||||||
struct RxDescV3 *descv3,
|
|
||||||
struct sk_buff *skb)
|
|
||||||
{
|
|
||||||
u16 rss_header_info;
|
|
||||||
|
|
||||||
if (!(tp->dev->features & NETIF_F_RXHASH))
|
|
||||||
return;
|
|
||||||
|
|
||||||
rss_header_info = le16_to_cpu(descv3->RxDescNormalDDWord2.HeaderInfo);
|
|
||||||
|
|
||||||
if (!(rss_header_info & RTL8125_RXS_RSS_L3_TYPE_MASK))
|
|
||||||
return;
|
|
||||||
|
|
||||||
skb_set_hash(skb, rtl8125_get_rx_desc_hash(tp, descv3),
|
|
||||||
(RTL8125_RXS_RSS_L4_TYPE_MASK & rss_header_info) ?
|
|
||||||
PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_disable_rss(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
RTL_W32(tp, RSS_CTRL_8125, 0x00);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _rtl8125_config_rss(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
_rtl8125_set_rss_hash_opt(tp);
|
|
||||||
|
|
||||||
rtl8125_store_reta(tp);
|
|
||||||
|
|
||||||
rtl8125_store_rss_key(tp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_config_rss(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
if (!tp->EnableRss) {
|
|
||||||
rtl8125_disable_rss(tp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_rtl8125_config_rss(tp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_init_rss(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < rtl8125_rss_indir_tbl_entries(tp); i++)
|
|
||||||
tp->rss_indir_tbl[i] = ethtool_rxfh_indir_default(i, tp->num_rx_rings);
|
|
||||||
|
|
||||||
netdev_rss_key_fill(tp->rss_key, RTL8125_RSS_KEY_SIZE);
|
|
||||||
}
|
|
|
@ -1,69 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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_RSS_H
|
|
||||||
#define _LINUX_rtl8125_RSS_H
|
|
||||||
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/types.h>
|
|
||||||
|
|
||||||
#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),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl8125_private;
|
|
||||||
|
|
||||||
int rtl8125_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
|
|
||||||
u32 *rule_locs);
|
|
||||||
int rtl8125_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd);
|
|
||||||
u32 rtl8125_get_rxfh_key_size(struct net_device *netdev);
|
|
||||||
u32 rtl8125_rss_indir_size(struct net_device *netdev);
|
|
||||||
int rtl8125_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
|
|
||||||
u8 *hfunc);
|
|
||||||
int rtl8125_set_rxfh(struct net_device *netdev, const u32 *indir,
|
|
||||||
const u8 *key, const u8 hfunc);
|
|
||||||
void rtl8125_rx_hash(struct rtl8125_private *tp,
|
|
||||||
struct RxDescV3 *descv3,
|
|
||||||
struct sk_buff *skb);
|
|
||||||
void _rtl8125_config_rss(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_config_rss(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_init_rss(struct rtl8125_private *tp);
|
|
||||||
u32 rtl8125_rss_indir_tbl_entries(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_disable_rss(struct rtl8125_private *tp);
|
|
||||||
|
|
||||||
#endif /* _LINUX_rtl8125_RSS_H */
|
|
|
@ -1,289 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
***********************************************************************************/
|
|
||||||
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include <linux/ethtool.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
|
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#include "r8125.h"
|
|
||||||
#include "rtl_eeprom.h"
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
//rtl8125_eeprom_type():
|
|
||||||
// tell the eeprom type
|
|
||||||
//return value:
|
|
||||||
// 0: the eeprom type is 93C46
|
|
||||||
// 1: the eeprom type is 93C56 or 93C66
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
void rtl8125_eeprom_type(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u16 magic = 0;
|
|
||||||
|
|
||||||
if (tp->mcfg == CFG_METHOD_DEFAULT)
|
|
||||||
goto out_no_eeprom;
|
|
||||||
|
|
||||||
if(RTL_R8(tp, 0xD2)&0x04) {
|
|
||||||
//not support
|
|
||||||
//tp->eeprom_type = EEPROM_TWSI;
|
|
||||||
//tp->eeprom_len = 256;
|
|
||||||
goto out_no_eeprom;
|
|
||||||
} else if(RTL_R32(tp, RxConfig) & RxCfg_9356SEL) {
|
|
||||||
tp->eeprom_type = EEPROM_TYPE_93C56;
|
|
||||||
tp->eeprom_len = 256;
|
|
||||||
} else {
|
|
||||||
tp->eeprom_type = EEPROM_TYPE_93C46;
|
|
||||||
tp->eeprom_len = 128;
|
|
||||||
}
|
|
||||||
|
|
||||||
magic = rtl8125_eeprom_read_sc(tp, 0);
|
|
||||||
|
|
||||||
out_no_eeprom:
|
|
||||||
if ((magic != 0x8129) && (magic != 0x8128)) {
|
|
||||||
tp->eeprom_type = EEPROM_TYPE_NONE;
|
|
||||||
tp->eeprom_len = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_eeprom_cleanup(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u8 x;
|
|
||||||
|
|
||||||
x = RTL_R8(tp, Cfg9346);
|
|
||||||
x &= ~(Cfg9346_EEDI | Cfg9346_EECS);
|
|
||||||
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
|
|
||||||
rtl8125_raise_clock(tp, &x);
|
|
||||||
rtl8125_lower_clock(tp, &x);
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8125_eeprom_cmd_done(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u8 x;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
rtl8125_stand_by(tp);
|
|
||||||
|
|
||||||
for (i = 0; i < 50000; i++) {
|
|
||||||
x = RTL_R8(tp, Cfg9346);
|
|
||||||
|
|
||||||
if (x & Cfg9346_EEDO) {
|
|
||||||
udelay(RTL_CLOCK_RATE * 2 * 3);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
//rtl8125_eeprom_read_sc():
|
|
||||||
// read one word from eeprom
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
u16 rtl8125_eeprom_read_sc(struct rtl8125_private *tp, u16 reg)
|
|
||||||
{
|
|
||||||
int addr_sz = 6;
|
|
||||||
u8 x;
|
|
||||||
u16 data;
|
|
||||||
|
|
||||||
if(tp->eeprom_type == EEPROM_TYPE_NONE) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tp->eeprom_type==EEPROM_TYPE_93C46)
|
|
||||||
addr_sz = 6;
|
|
||||||
else if (tp->eeprom_type==EEPROM_TYPE_93C56)
|
|
||||||
addr_sz = 8;
|
|
||||||
|
|
||||||
x = Cfg9346_EEM1 | Cfg9346_EECS;
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
|
|
||||||
rtl8125_shift_out_bits(tp, RTL_EEPROM_READ_OPCODE, 3);
|
|
||||||
rtl8125_shift_out_bits(tp, reg, addr_sz);
|
|
||||||
|
|
||||||
data = rtl8125_shift_in_bits(tp);
|
|
||||||
|
|
||||||
rtl8125_eeprom_cleanup(tp);
|
|
||||||
|
|
||||||
RTL_W8(tp, Cfg9346, 0);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
//rtl8125_eeprom_write_sc():
|
|
||||||
// write one word to a specific address in the eeprom
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
void rtl8125_eeprom_write_sc(struct rtl8125_private *tp, u16 reg, u16 data)
|
|
||||||
{
|
|
||||||
u8 x;
|
|
||||||
int addr_sz = 6;
|
|
||||||
int w_dummy_addr = 4;
|
|
||||||
|
|
||||||
if(tp->eeprom_type == EEPROM_TYPE_NONE) {
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tp->eeprom_type==EEPROM_TYPE_93C46) {
|
|
||||||
addr_sz = 6;
|
|
||||||
w_dummy_addr = 4;
|
|
||||||
} else if (tp->eeprom_type==EEPROM_TYPE_93C56) {
|
|
||||||
addr_sz = 8;
|
|
||||||
w_dummy_addr = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
x = Cfg9346_EEM1 | Cfg9346_EECS;
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
|
|
||||||
rtl8125_shift_out_bits(tp, RTL_EEPROM_EWEN_OPCODE, 5);
|
|
||||||
rtl8125_shift_out_bits(tp, reg, w_dummy_addr);
|
|
||||||
rtl8125_stand_by(tp);
|
|
||||||
|
|
||||||
rtl8125_shift_out_bits(tp, RTL_EEPROM_ERASE_OPCODE, 3);
|
|
||||||
rtl8125_shift_out_bits(tp, reg, addr_sz);
|
|
||||||
if (rtl8125_eeprom_cmd_done(tp) < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rtl8125_stand_by(tp);
|
|
||||||
|
|
||||||
rtl8125_shift_out_bits(tp, RTL_EEPROM_WRITE_OPCODE, 3);
|
|
||||||
rtl8125_shift_out_bits(tp, reg, addr_sz);
|
|
||||||
rtl8125_shift_out_bits(tp, data, 16);
|
|
||||||
if (rtl8125_eeprom_cmd_done(tp) < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rtl8125_stand_by(tp);
|
|
||||||
|
|
||||||
rtl8125_shift_out_bits(tp, RTL_EEPROM_EWDS_OPCODE, 5);
|
|
||||||
rtl8125_shift_out_bits(tp, reg, w_dummy_addr);
|
|
||||||
|
|
||||||
rtl8125_eeprom_cleanup(tp);
|
|
||||||
RTL_W8(tp, Cfg9346, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_raise_clock(struct rtl8125_private *tp, u8 *x)
|
|
||||||
{
|
|
||||||
*x = *x | Cfg9346_EESK;
|
|
||||||
RTL_W8(tp, Cfg9346, *x);
|
|
||||||
udelay(RTL_CLOCK_RATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_lower_clock(struct rtl8125_private *tp, u8 *x)
|
|
||||||
{
|
|
||||||
|
|
||||||
*x = *x & ~Cfg9346_EESK;
|
|
||||||
RTL_W8(tp, Cfg9346, *x);
|
|
||||||
udelay(RTL_CLOCK_RATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_shift_out_bits(struct rtl8125_private *tp, int data, int count)
|
|
||||||
{
|
|
||||||
u8 x;
|
|
||||||
int mask;
|
|
||||||
|
|
||||||
mask = 0x01 << (count - 1);
|
|
||||||
x = RTL_R8(tp, Cfg9346);
|
|
||||||
x &= ~(Cfg9346_EEDI | Cfg9346_EEDO);
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (data & mask)
|
|
||||||
x |= Cfg9346_EEDI;
|
|
||||||
else
|
|
||||||
x &= ~Cfg9346_EEDI;
|
|
||||||
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
udelay(RTL_CLOCK_RATE);
|
|
||||||
rtl8125_raise_clock(tp, &x);
|
|
||||||
rtl8125_lower_clock(tp, &x);
|
|
||||||
mask = mask >> 1;
|
|
||||||
} while(mask);
|
|
||||||
|
|
||||||
x &= ~Cfg9346_EEDI;
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
u16 rtl8125_shift_in_bits(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u8 x;
|
|
||||||
u16 d, i;
|
|
||||||
|
|
||||||
x = RTL_R8(tp, Cfg9346);
|
|
||||||
x &= ~(Cfg9346_EEDI | Cfg9346_EEDO);
|
|
||||||
|
|
||||||
d = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++) {
|
|
||||||
d = d << 1;
|
|
||||||
rtl8125_raise_clock(tp, &x);
|
|
||||||
|
|
||||||
x = RTL_R8(tp, Cfg9346);
|
|
||||||
x &= ~Cfg9346_EEDI;
|
|
||||||
|
|
||||||
if (x & Cfg9346_EEDO)
|
|
||||||
d |= 1;
|
|
||||||
|
|
||||||
rtl8125_lower_clock(tp, &x);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_stand_by(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
u8 x;
|
|
||||||
|
|
||||||
x = RTL_R8(tp, Cfg9346);
|
|
||||||
x &= ~(Cfg9346_EECS | Cfg9346_EESK);
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
udelay(RTL_CLOCK_RATE);
|
|
||||||
|
|
||||||
x |= Cfg9346_EECS;
|
|
||||||
RTL_W8(tp, Cfg9346, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8125_set_eeprom_sel_low(struct rtl8125_private *tp)
|
|
||||||
{
|
|
||||||
RTL_W8(tp, Cfg9346, Cfg9346_EEM1);
|
|
||||||
RTL_W8(tp, Cfg9346, Cfg9346_EEM1 | Cfg9346_EESK);
|
|
||||||
|
|
||||||
udelay(20);
|
|
||||||
|
|
||||||
RTL_W8(tp, Cfg9346, Cfg9346_EEM1);
|
|
||||||
}
|
|
|
@ -1,53 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
***********************************************************************************/
|
|
||||||
|
|
||||||
//EEPROM opcodes
|
|
||||||
#define RTL_EEPROM_READ_OPCODE 06
|
|
||||||
#define RTL_EEPROM_WRITE_OPCODE 05
|
|
||||||
#define RTL_EEPROM_ERASE_OPCODE 07
|
|
||||||
#define RTL_EEPROM_EWEN_OPCODE 19
|
|
||||||
#define RTL_EEPROM_EWDS_OPCODE 16
|
|
||||||
|
|
||||||
#define RTL_CLOCK_RATE 3
|
|
||||||
|
|
||||||
void rtl8125_eeprom_type(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_eeprom_cleanup(struct rtl8125_private *tp);
|
|
||||||
u16 rtl8125_eeprom_read_sc(struct rtl8125_private *tp, u16 reg);
|
|
||||||
void rtl8125_eeprom_write_sc(struct rtl8125_private *tp, u16 reg, u16 data);
|
|
||||||
void rtl8125_shift_out_bits(struct rtl8125_private *tp, int data, int count);
|
|
||||||
u16 rtl8125_shift_in_bits(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_raise_clock(struct rtl8125_private *tp, u8 *x);
|
|
||||||
void rtl8125_lower_clock(struct rtl8125_private *tp, u8 *x);
|
|
||||||
void rtl8125_stand_by(struct rtl8125_private *tp);
|
|
||||||
void rtl8125_set_eeprom_sel_low(struct rtl8125_private *tp);
|
|
|
@ -1,320 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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.
|
|
||||||
***********************************************************************************/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include <linux/pci.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include <linux/in.h>
|
|
||||||
#include <linux/ethtool.h>
|
|
||||||
#include <asm/uaccess.h>
|
|
||||||
#include "r8125.h"
|
|
||||||
#include "rtl_eeprom.h"
|
|
||||||
#include "rtltool.h"
|
|
||||||
|
|
||||||
int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr)
|
|
||||||
{
|
|
||||||
struct rtltool_cmd my_cmd;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (copy_from_user(&my_cmd, ifr->ifr_data, sizeof(my_cmd)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
switch (my_cmd.cmd) {
|
|
||||||
case RTLTOOL_READ_MAC:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (my_cmd.len==1)
|
|
||||||
my_cmd.data = readb(tp->mmio_addr+my_cmd.offset);
|
|
||||||
else if (my_cmd.len==2)
|
|
||||||
my_cmd.data = readw(tp->mmio_addr+(my_cmd.offset&~1));
|
|
||||||
else if (my_cmd.len==4)
|
|
||||||
my_cmd.data = readl(tp->mmio_addr+(my_cmd.offset&~3));
|
|
||||||
else {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_WRITE_MAC:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (my_cmd.len==1)
|
|
||||||
writeb(my_cmd.data, tp->mmio_addr+my_cmd.offset);
|
|
||||||
else if (my_cmd.len==2)
|
|
||||||
writew(my_cmd.data, tp->mmio_addr+(my_cmd.offset&~1));
|
|
||||||
else if (my_cmd.len==4)
|
|
||||||
writel(my_cmd.data, tp->mmio_addr+(my_cmd.offset&~3));
|
|
||||||
else {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_READ_PHY:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
my_cmd.data = rtl8125_mdio_prot_read(tp, my_cmd.offset);
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_WRITE_PHY:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
rtl8125_mdio_prot_write(tp, my_cmd.offset, my_cmd.data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_READ_EPHY:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
my_cmd.data = rtl8125_ephy_read(tp, my_cmd.offset);
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_WRITE_EPHY:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
rtl8125_ephy_write(tp, my_cmd.offset, my_cmd.data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_READ_ERI:
|
|
||||||
my_cmd.data = 0;
|
|
||||||
if (my_cmd.len==1 || my_cmd.len==2 || my_cmd.len==4) {
|
|
||||||
my_cmd.data = rtl8125_eri_read(tp, my_cmd.offset, my_cmd.len, ERIAR_ExGMAC);
|
|
||||||
} else {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_WRITE_ERI:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (my_cmd.len==1 || my_cmd.len==2 || my_cmd.len==4) {
|
|
||||||
rtl8125_eri_write(tp, my_cmd.offset, my_cmd.len, my_cmd.data, ERIAR_ExGMAC);
|
|
||||||
} else {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_READ_PCI:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
my_cmd.data = 0;
|
|
||||||
if (my_cmd.len==1)
|
|
||||||
pci_read_config_byte(tp->pci_dev, my_cmd.offset,
|
|
||||||
(u8 *)&my_cmd.data);
|
|
||||||
else if (my_cmd.len==2)
|
|
||||||
pci_read_config_word(tp->pci_dev, my_cmd.offset,
|
|
||||||
(u16 *)&my_cmd.data);
|
|
||||||
else if (my_cmd.len==4)
|
|
||||||
pci_read_config_dword(tp->pci_dev, my_cmd.offset,
|
|
||||||
&my_cmd.data);
|
|
||||||
else {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_WRITE_PCI:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (my_cmd.len==1)
|
|
||||||
pci_write_config_byte(tp->pci_dev, my_cmd.offset,
|
|
||||||
my_cmd.data);
|
|
||||||
else if (my_cmd.len==2)
|
|
||||||
pci_write_config_word(tp->pci_dev, my_cmd.offset,
|
|
||||||
my_cmd.data);
|
|
||||||
else if (my_cmd.len==4)
|
|
||||||
pci_write_config_dword(tp->pci_dev, my_cmd.offset,
|
|
||||||
my_cmd.data);
|
|
||||||
else {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_READ_EEPROM:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
my_cmd.data = rtl8125_eeprom_read_sc(tp, my_cmd.offset);
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTLTOOL_WRITE_EEPROM:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
rtl8125_eeprom_write_sc(tp, my_cmd.offset, my_cmd.data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_READ_OOB_MAC:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
rtl8125_oob_mutex_lock(tp);
|
|
||||||
my_cmd.data = rtl8125_ocp_read(tp, my_cmd.offset, 4);
|
|
||||||
rtl8125_oob_mutex_unlock(tp);
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_WRITE_OOB_MAC:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (my_cmd.len == 0 || my_cmd.len > 4)
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
rtl8125_oob_mutex_lock(tp);
|
|
||||||
rtl8125_ocp_write(tp, my_cmd.offset, my_cmd.len, my_cmd.data);
|
|
||||||
rtl8125_oob_mutex_unlock(tp);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_ENABLE_PCI_DIAG:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
tp->rtk_enable_diag = 1;
|
|
||||||
|
|
||||||
dprintk("enable rtk diag\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_DISABLE_PCI_DIAG:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
tp->rtk_enable_diag = 0;
|
|
||||||
|
|
||||||
dprintk("disable rtk diag\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_READ_MAC_OCP:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (my_cmd.offset % 2)
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
my_cmd.data = rtl8125_mac_ocp_read(tp, my_cmd.offset);
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_WRITE_MAC_OCP:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if ((my_cmd.offset % 2) || (my_cmd.len != 2))
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
rtl8125_mac_ocp_write(tp, my_cmd.offset, (u16)my_cmd.data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_DIRECT_READ_PHY_OCP:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
my_cmd.data = rtl8125_mdio_prot_direct_read_phy_ocp(tp, my_cmd.offset);
|
|
||||||
if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) {
|
|
||||||
ret = -EFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RTL_DIRECT_WRITE_PHY_OCP:
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
rtl8125_mdio_prot_direct_write_phy_ocp(tp, my_cmd.offset, my_cmd.data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
|
@ -1,86 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author:
|
|
||||||
# Realtek NIC software team <nicfae@realtek.com>
|
|
||||||
# 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_RTLTOOL_H
|
|
||||||
#define _LINUX_RTLTOOL_H
|
|
||||||
|
|
||||||
#define SIOCRTLTOOL SIOCDEVPRIVATE+1
|
|
||||||
|
|
||||||
enum rtl_cmd {
|
|
||||||
RTLTOOL_READ_MAC=0,
|
|
||||||
RTLTOOL_WRITE_MAC,
|
|
||||||
RTLTOOL_READ_PHY,
|
|
||||||
RTLTOOL_WRITE_PHY,
|
|
||||||
RTLTOOL_READ_EPHY,
|
|
||||||
RTLTOOL_WRITE_EPHY,
|
|
||||||
RTLTOOL_READ_ERI,
|
|
||||||
RTLTOOL_WRITE_ERI,
|
|
||||||
RTLTOOL_READ_PCI,
|
|
||||||
RTLTOOL_WRITE_PCI,
|
|
||||||
RTLTOOL_READ_EEPROM,
|
|
||||||
RTLTOOL_WRITE_EEPROM,
|
|
||||||
|
|
||||||
RTL_READ_OOB_MAC,
|
|
||||||
RTL_WRITE_OOB_MAC,
|
|
||||||
|
|
||||||
RTL_ENABLE_PCI_DIAG,
|
|
||||||
RTL_DISABLE_PCI_DIAG,
|
|
||||||
|
|
||||||
RTL_READ_MAC_OCP,
|
|
||||||
RTL_WRITE_MAC_OCP,
|
|
||||||
|
|
||||||
RTL_DIRECT_READ_PHY_OCP,
|
|
||||||
RTL_DIRECT_WRITE_PHY_OCP,
|
|
||||||
|
|
||||||
RTLTOOL_INVALID
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtltool_cmd {
|
|
||||||
__u32 cmd;
|
|
||||||
__u32 offset;
|
|
||||||
__u32 len;
|
|
||||||
__u32 data;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum mode_access {
|
|
||||||
MODE_NONE=0,
|
|
||||||
MODE_READ,
|
|
||||||
MODE_WRITE
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _LINUX_RTLTOOL_H */
|
|
|
@ -7,14 +7,14 @@ include $(TOPDIR)/rules.mk
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=r8168
|
PKG_NAME:=r8168
|
||||||
PKG_VERSION:=8.049.02
|
PKG_VERSION:=8.050.03
|
||||||
PKG_RELEASE:=$(AUTORELEAE)
|
PKG_RELEASE:=$(AUTORELEAE)
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/BROBIRD/openwrt-r8168.git
|
PKG_SOURCE_URL:=https://github.com/BROBIRD/openwrt-r8168.git
|
||||||
PKG_SOURCE_DATE:=2021-10-08
|
PKG_SOURCE_DATE:=2022-06-15
|
||||||
PKG_SOURCE_VERSION:=2b969c15afe403a685fc7ee069620782241e3ad6
|
PKG_SOURCE_VERSION:=ddfaceacd1b7ed2857fb995642a8ffb1fc37e989
|
||||||
PKG_MIRROR_HASH:=e4632c10d460f005eff76da8a183d7ff0c8819b0d099872589b7b06a9b8d9952
|
#PKG_MIRROR_HASH:=e4632c10d460f005eff76da8a183d7ff0c8819b0d099872589b7b06a9b8d9952
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
|
|
|
@ -326,7 +326,7 @@ reload_service() {
|
||||||
}
|
}
|
||||||
|
|
||||||
rules_exist() {
|
rules_exist() {
|
||||||
[ -n "$(iptables-save | grep 'A ssr')" ] && return 0
|
[ -n "$(iptables-save 2>/dev/null | grep 'A ssr')" ] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ rules_up() {
|
||||||
config_foreach ss_rules_restart "$cfgtype" "$cfgtype"
|
config_foreach ss_rules_restart "$cfgtype" "$cfgtype"
|
||||||
done
|
done
|
||||||
config_foreach ss_rules ss_rules
|
config_foreach ss_rules ss_rules
|
||||||
[ -z "$(iptables-save | grep :ssr)" ] && logger -t "Shadowsocks" "Rules not applied"
|
[ -z "$(iptables-save 2>/dev/null | grep :ssr)" ] && logger -t "Shadowsocks" "Rules not applied"
|
||||||
[ -f /etc/init.d/omr-bypass ] && [ -z "$(pgrep -f omr-bypass)" ] && {
|
[ -f /etc/init.d/omr-bypass ] && [ -z "$(pgrep -f omr-bypass)" ] && {
|
||||||
logger -t "Shadowsocks" "Reload omr-bypass rules"
|
logger -t "Shadowsocks" "Reload omr-bypass rules"
|
||||||
/etc/init.d/omr-bypass reload_rules
|
/etc/init.d/omr-bypass reload_rules
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
#
|
#
|
||||||
# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
|
# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
|
||||||
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||||
#
|
#
|
||||||
# The design idea was derived from ss-rules by Jian Chang <aa65535@live.com>
|
# The design idea was derived from ss-rules by Jian Chang <aa65535@live.com>
|
||||||
#
|
#
|
||||||
|
@ -9,6 +9,17 @@
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
ss_rules_usage() {
|
ss_rules_usage() {
|
||||||
cat >&2 <<EOF
|
cat >&2 <<EOF
|
||||||
Usage: ss-rules [options]
|
Usage: ss-rules [options]
|
||||||
|
@ -112,7 +123,7 @@ ss_rules_parse_args() {
|
||||||
__errmsg "Requires at least -l or -L option"
|
__errmsg "Requires at least -l or -L option"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [ -n "$o_dst_forward_recentrst" ] && ! iptables -w -m recent -h >/dev/null; then
|
if [ -n "$o_dst_forward_recentrst" ] && ! $IPTABLES -w -m recent -h >/dev/null; then
|
||||||
__errmsg "Please install iptables-mod-conntrack-extra with opkg"
|
__errmsg "Please install iptables-mod-conntrack-extra with opkg"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -122,31 +133,31 @@ ss_rules_parse_args() {
|
||||||
ss_rules_flush() {
|
ss_rules_flush() {
|
||||||
local setname
|
local setname
|
||||||
|
|
||||||
iptables-save --counters | grep -v ssr_ | iptables-restore -w --counters
|
$IPTABLESSAVE --counters 2>/dev/null | grep -v ssr_ | $IPTABLESRESTORE -w --counters
|
||||||
while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
||||||
ip route flush table 100 || true
|
ip route flush table 100 || true
|
||||||
for setname in $(ipset -n list | grep "ss_rules_"); do
|
for setname in $(ipset -n list | grep "ssr_${rule}"); do
|
||||||
ipset destroy "$setname" 2>/dev/null || true
|
ipset destroy "$setname" 2>/dev/null || true
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
ss_rules_ipset_init() {
|
ss_rules_ipset_init() {
|
||||||
ipset --exist restore <<-EOF
|
ipset --exist restore <<-EOF
|
||||||
create ss_rules_src_bypass hash:net hashsize 64
|
create ssr_${rule}_src_bypass hash:net hashsize 64
|
||||||
create ss_rules_src_forward hash:net hashsize 64
|
create ssr_${rule}_src_forward hash:net hashsize 64
|
||||||
create ss_rules_src_checkdst hash:net hashsize 64
|
create ssr_${rule}_src_checkdst hash:net hashsize 64
|
||||||
create ss_rules_dst_bypass_all hash:net hashsize 64
|
create ss_rules_dst_bypass_all hash:net hashsize 64
|
||||||
create ss_rules_dst_bypass hash:net hashsize 64
|
create ssr_${rule}_dst_bypass hash:net hashsize 64
|
||||||
create ss_rules_dst_bypass_ hash:net hashsize 64
|
create ssr_${rule}_dst_bypass_ hash:net hashsize 64
|
||||||
create ss_rules_dst_forward hash:net hashsize 64
|
create ssr_${rule}_dst_forward hash:net hashsize 64
|
||||||
create ss_rules_dst_forward_recentrst_ hash:ip hashsize 64 timeout 3600
|
create ss_rules_dst_forward_recentrst_ hash:ip hashsize 64 timeout 3600
|
||||||
$(ss_rules_ipset_mkadd ss_rules_dst_bypass_ "$o_dst_bypass_ $o_remote_servers")
|
$(ss_rules_ipset_mkadd ssr_${rule}_dst_bypass_ "$o_dst_bypass_ $o_remote_servers")
|
||||||
$(ss_rules_ipset_mkadd ss_rules_dst_bypass_all "$o_dst_bypass_all")
|
$(ss_rules_ipset_mkadd ss_rules_dst_bypass_all "$o_dst_bypass_all")
|
||||||
$(ss_rules_ipset_mkadd ss_rules_dst_bypass "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')")
|
$(ss_rules_ipset_mkadd ssr_${rule}_dst_bypass "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')")
|
||||||
$(ss_rules_ipset_mkadd ss_rules_src_bypass "$o_src_bypass")
|
$(ss_rules_ipset_mkadd ssr_${rule}_src_bypass "$o_src_bypass")
|
||||||
$(ss_rules_ipset_mkadd ss_rules_src_forward "$o_src_forward")
|
$(ss_rules_ipset_mkadd ssr_${rule}_src_forward "$o_src_forward")
|
||||||
$(ss_rules_ipset_mkadd ss_rules_src_checkdst "$o_src_checkdst")
|
$(ss_rules_ipset_mkadd ssr_${rule}_src_checkdst "$o_src_checkdst")
|
||||||
$(ss_rules_ipset_mkadd ss_rules_dst_forward "$o_dst_forward $(cat "$o_dst_forward_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')")
|
$(ss_rules_ipset_mkadd ssr_${rule}_dst_forward "$o_dst_forward $(cat "$o_dst_forward_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')")
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,8 +177,8 @@ ss_rules_iptchains_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ss_rules_iptchains_init_mark() {
|
ss_rules_iptchains_init_mark() {
|
||||||
if [ "$(iptables -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then
|
if [ "$($IPTABLES -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then
|
||||||
iptables-restore -w --noflush <<-EOF
|
$IPTABLESRESTORE -w --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539
|
-A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -187,18 +198,19 @@ ss_rules_iptchains_init_tcp() {
|
||||||
forward) local_target=ssr_${rule}_forward ;;
|
forward) local_target=ssr_${rule}_forward ;;
|
||||||
bypass|*) return 0;;
|
bypass|*) return 0;;
|
||||||
esac
|
esac
|
||||||
|
if [ "$($IPTABLESSAVE 2>/dev/null | grep ssr_${rule}_local_out | grep ssr_${rule}_dst_bypass)" = "" ]; then
|
||||||
iptables-restore -w --noflush <<-EOF
|
$IPTABLESRESTORE -w --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
:ssr_${rule}_local_out -
|
:ssr_${rule}_local_out -
|
||||||
-I OUTPUT 1 -p tcp -j ssr_${rule}_local_out
|
-I OUTPUT 1 -p tcp -j ssr_${rule}_local_out
|
||||||
-A ssr_${rule}_local_out -m set --match-set ss_rules_dst_bypass dst -j RETURN
|
-A ssr_${rule}_local_out -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN
|
||||||
-A ssr_${rule}_local_out -m set --match-set ss_rules_dst_bypass_all dst -j RETURN
|
-A ssr_${rule}_local_out -m set --match-set ss_rules_dst_bypass_all dst -j RETURN
|
||||||
-A ssr_${rule}_local_out -m set --match-set ss_rules_dst_bypass_ dst -j RETURN
|
-A ssr_${rule}_local_out -m set --match-set ssr_${rule}_dst_bypass_ dst -j RETURN
|
||||||
-A ssr_${rule}_local_out -m mark --mark 0x539 -j RETURN
|
-A ssr_${rule}_local_out -m mark --mark 0x539 -j RETURN
|
||||||
-A ssr_${rule}_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default"
|
-A ssr_${rule}_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default"
|
||||||
COMMIT
|
COMMIT
|
||||||
EOF
|
EOF
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
ss_rules_iptchains_init_udp() {
|
ss_rules_iptchains_init_udp() {
|
||||||
|
@ -243,26 +255,26 @@ ss_rules_iptchains_init_() {
|
||||||
forward) dst_default_target=ssr_${rule}_forward ;;
|
forward) dst_default_target=ssr_${rule}_forward ;;
|
||||||
bypass|*) dst_default_target=RETURN ;;
|
bypass|*) dst_default_target=RETURN ;;
|
||||||
esac
|
esac
|
||||||
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | iptables-restore -w --noflush
|
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IPTABLESRESTORE -w --noflush
|
||||||
*$table
|
*$table
|
||||||
:ssr_${rule}_pre_src -
|
:ssr_${rule}_pre_src -
|
||||||
:ssr_${rule}_src -
|
:ssr_${rule}_src -
|
||||||
:ssr_${rule}_dst -
|
:ssr_${rule}_dst -
|
||||||
:ssr_${rule}_forward -
|
:ssr_${rule}_forward -
|
||||||
$(ss_rules_iptchains_mkprerules "$proto")
|
$(ss_rules_iptchains_mkprerules "$proto")
|
||||||
-A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_ dst -j RETURN
|
-A ssr_${rule}_pre_src -m set --match-set ssr_${rule}_dst_bypass_ dst -j RETURN
|
||||||
-A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539
|
-A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
-A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j RETURN
|
-A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j RETURN
|
||||||
-A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass dst -j RETURN
|
-A ssr_${rule}_pre_src -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN
|
||||||
-A ssr_${rule}_pre_src -m mark --mark 0x539 -j RETURN
|
-A ssr_${rule}_pre_src -m mark --mark 0x539 -j RETURN
|
||||||
-A ssr_${rule}_dst -m set --match-set ss_rules_dst_bypass_all dst -j RETURN
|
-A ssr_${rule}_dst -m set --match-set ss_rules_dst_bypass_all dst -j RETURN
|
||||||
-A ssr_${rule}_dst -m set --match-set ss_rules_dst_bypass dst -j RETURN
|
-A ssr_${rule}_dst -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN
|
||||||
-A ssr_${rule}_pre_src -p $proto $o_ipt_extra -j ssr_${rule}_src
|
-A ssr_${rule}_pre_src -p $proto $o_ipt_extra -j ssr_${rule}_src
|
||||||
-A ssr_${rule}_src -m set --match-set ss_rules_src_bypass src -j RETURN
|
-A ssr_${rule}_src -m set --match-set ssr_${rule}_src_bypass src -j RETURN
|
||||||
-A ssr_${rule}_src -m set --match-set ss_rules_src_forward src -j ssr_${rule}_forward
|
-A ssr_${rule}_src -m set --match-set ssr_${rule}_src_forward src -j ssr_${rule}_forward
|
||||||
-A ssr_${rule}_src -m set --match-set ss_rules_src_checkdst src -j ssr_${rule}_dst
|
-A ssr_${rule}_src -m set --match-set ssr_${rule}_src_checkdst src -j ssr_${rule}_dst
|
||||||
-A ssr_${rule}_src -j $src_default_target -m comment --comment "src_default: $o_src_default"
|
-A ssr_${rule}_src -j $src_default_target -m comment --comment "src_default: $o_src_default"
|
||||||
-A ssr_${rule}_dst -m set --match-set ss_rules_dst_forward dst -j ssr_${rule}_forward
|
-A ssr_${rule}_dst -m set --match-set ssr_${rule}_dst_forward dst -j ssr_${rule}_forward
|
||||||
$recentrst_addset_rules
|
$recentrst_addset_rules
|
||||||
-A ssr_${rule}_dst -j $dst_default_target -m comment --comment "dst_default: $o_dst_default"
|
-A ssr_${rule}_dst -j $dst_default_target -m comment --comment "dst_default: $o_dst_default"
|
||||||
$forward_rules
|
$forward_rules
|
||||||
|
|
|
@ -9,6 +9,18 @@
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables-legacy"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-legacy-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save"
|
||||||
|
else
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ss_rules6_usage() {
|
ss_rules6_usage() {
|
||||||
cat >&2 <<EOF
|
cat >&2 <<EOF
|
||||||
Usage: ss-rules [options]
|
Usage: ss-rules [options]
|
||||||
|
@ -95,7 +107,7 @@ ss_rules6_parse_args() {
|
||||||
__errmsg "Requires at least -l or -L option"
|
__errmsg "Requires at least -l or -L option"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [ -n "$o_dst_forward_recentrst" ] && ! ip6tables -w -m recent -h >/dev/null; then
|
if [ -n "$o_dst_forward_recentrst" ] && ! $IP6TABLES -w -m recent -h >/dev/null; then
|
||||||
__errmsg "Please install ip6tables-mod-conntrack-extra with opkg"
|
__errmsg "Please install ip6tables-mod-conntrack-extra with opkg"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -105,7 +117,7 @@ ss_rules6_parse_args() {
|
||||||
ss_rules6_flush() {
|
ss_rules6_flush() {
|
||||||
local setname
|
local setname
|
||||||
|
|
||||||
ip6tables-save --counters | grep -v ssr6_ | ip6tables-restore -w --counters
|
$IP6TABLESSAVE --counters 2>/dev/null | grep -v ssr6_ | $IP6TABLESRESTORE -w --counters
|
||||||
while ip -f inet6 rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
while ip -f inet6 rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
||||||
ip -f inet6 route flush table 100 || true
|
ip -f inet6 route flush table 100 || true
|
||||||
for setname in $(ipset -n list | grep "ss_rules6_"); do
|
for setname in $(ipset -n list | grep "ss_rules6_"); do
|
||||||
|
@ -149,8 +161,8 @@ ss_rules6_iptchains_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ss_rules6_iptchains_init_mark() {
|
ss_rules6_iptchains_init_mark() {
|
||||||
if [ "$(ip6tables -w -t mangle -L PREROUTING | grep ss_rules6_dst_bypass_all)" = "" ]; then
|
if [ "$($IP6TABLES -w -t mangle -L PREROUTING | grep ss_rules6_dst_bypass_all)" = "" ]; then
|
||||||
ip6tables-restore -w --noflush <<-EOF
|
$IP6TABLESRESTORE -w --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A PREROUTING -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
-A PREROUTING -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -172,7 +184,7 @@ ss_rules6_iptchains_init_tcp() {
|
||||||
bypass|*) return 0;;
|
bypass|*) return 0;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
ip6tables-restore -w --noflush <<-EOF
|
$IP6TABLESRESTORE -w --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
:ssr6_${rule}_local_out -
|
:ssr6_${rule}_local_out -
|
||||||
-I OUTPUT 1 -p tcp -j ssr6_${rule}_local_out
|
-I OUTPUT 1 -p tcp -j ssr6_${rule}_local_out
|
||||||
|
@ -227,7 +239,7 @@ ss_rules6_iptchains_init_() {
|
||||||
forward) dst_default_target=ssr6_${rule}_forward ;;
|
forward) dst_default_target=ssr6_${rule}_forward ;;
|
||||||
bypass|*) dst_default_target=RETURN ;;
|
bypass|*) dst_default_target=RETURN ;;
|
||||||
esac
|
esac
|
||||||
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | ip6tables-restore -w --noflush
|
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IP6TABLESRESTORE -w --noflush
|
||||||
*$table
|
*$table
|
||||||
:ssr6_${rule}_pre_src -
|
:ssr6_${rule}_pre_src -
|
||||||
:ssr6_${rule}_src -
|
:ssr6_${rule}_src -
|
||||||
|
|
|
@ -23,7 +23,7 @@ config V2RAY_EXCLUDE_V2CTL
|
||||||
|
|
||||||
config V2RAY_EXCLUDE_ASSETS
|
config V2RAY_EXCLUDE_ASSETS
|
||||||
bool "Exclude geoip.dat & geosite.dat"
|
bool "Exclude geoip.dat & geosite.dat"
|
||||||
default n
|
default y
|
||||||
|
|
||||||
config V2RAY_COMPRESS_UPX
|
config V2RAY_COMPRESS_UPX
|
||||||
bool "Compress executable files with UPX"
|
bool "Compress executable files with UPX"
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=v2ray-core
|
PKG_NAME:=v2ray-core
|
||||||
PKG_VERSION:=4.43.0
|
PKG_VERSION:=4.45.2
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE:=v$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=v$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core/archive/refs/tags/
|
PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core/archive/refs/tags/
|
||||||
PKG_HASH:=f27b8fe8e1e102b0297339ee368c8b650fde0f949e0d90e1229ff6744f99ba0f
|
PKG_HASH:=7a126bac7df32f627f34331778cb39ac99db18d7edcd45628db06e123fa0694b
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
PKG_LICENSE:=MIT
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
#
|
#
|
||||||
# Copyright 2019-2020 Xingwang Liao <kuoruan@gmail.com>
|
# Copyright 2019-2020 Xingwang Liao <kuoruan@gmail.com>
|
||||||
# Copyright 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
# Copyright 2020-2022 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
||||||
# Licensed to the public under the MIT License.
|
# Licensed to the public under the MIT License.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
@ -2086,7 +2086,7 @@ start_instance() {
|
||||||
}
|
}
|
||||||
|
|
||||||
rules_exist() {
|
rules_exist() {
|
||||||
[ -n "$(iptables -w -t nat -L -n | grep v2r_)" ] && return 0
|
[ -n "$(iptables -w -t nat -L -n 2>/dev/null | grep v2r_)" ] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2102,7 +2102,7 @@ rules_up() {
|
||||||
OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_vless_address)"
|
OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_vless_address)"
|
||||||
OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_vless_address)"
|
OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_vless_address)"
|
||||||
TRANSPARENT_PROXY_PORT="$(uci -q get v2ray.omr.port)"
|
TRANSPARENT_PROXY_PORT="$(uci -q get v2ray.omr.port)"
|
||||||
[ -n "$OUTBOUND_SERVERS_V4" ] && {
|
[ -n "$OUTBOUND_SERVERS_V4" ] || [ -n "$OUTBOUND_SERVERS_V6" ] && {
|
||||||
logger -t "v2ray" "Rules UP"
|
logger -t "v2ray" "Rules UP"
|
||||||
add_v2ray_redirect_rules
|
add_v2ray_redirect_rules
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,18 @@
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IPTABLES="/usr/sbin/iptables-legacy"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-legacy-save"
|
||||||
|
else
|
||||||
|
IPTABLES="/usr/sbin/iptables"
|
||||||
|
IPTABLESRESTORE="/usr/sbin/iptables-restore"
|
||||||
|
IPTABLESSAVE="/usr/sbin/iptables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v2r_rules_usage() {
|
v2r_rules_usage() {
|
||||||
cat >&2 <<EOF
|
cat >&2 <<EOF
|
||||||
Usage: v2ray-rules [options]
|
Usage: v2ray-rules [options]
|
||||||
|
@ -112,7 +124,7 @@ v2r_rules_parse_args() {
|
||||||
__errmsg "Requires at least -l or -L option"
|
__errmsg "Requires at least -l or -L option"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [ -n "$o_dst_forward_recentrst" ] && ! iptables -w -m recent -h >/dev/null; then
|
if [ -n "$o_dst_forward_recentrst" ] && ! $IPTABLES -w -m recent -h >/dev/null; then
|
||||||
__errmsg "Please install iptables-mod-conntrack-extra with opkg"
|
__errmsg "Please install iptables-mod-conntrack-extra with opkg"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -122,7 +134,7 @@ v2r_rules_parse_args() {
|
||||||
v2r_rules_flush() {
|
v2r_rules_flush() {
|
||||||
local setname
|
local setname
|
||||||
|
|
||||||
iptables-save --counters | grep -v v2r_ | iptables-restore -w --counters
|
$IPTABLESSAVE --counters 2>/dev/null | grep -v v2r_ | $IPTABLESRESTORE -w --counters
|
||||||
while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
||||||
ip route flush table 100 || true
|
ip route flush table 100 || true
|
||||||
for setname in $(ipset -n list | grep "ss_rules_"); do
|
for setname in $(ipset -n list | grep "ss_rules_"); do
|
||||||
|
@ -166,8 +178,8 @@ v2r_rules_iptchains_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
v2r_rules_iptchains_init_mark() {
|
v2r_rules_iptchains_init_mark() {
|
||||||
if [ "$(iptables -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then
|
if [ "$($IPTABLES -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then
|
||||||
iptables-restore -w --noflush <<-EOF
|
$IPTABLESRESTORE -w --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539
|
-A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -188,7 +200,7 @@ v2r_rules_iptchains_init_tcp() {
|
||||||
bypass|*) return 0;;
|
bypass|*) return 0;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
iptables-restore -w --noflush <<-EOF
|
$IPTABLESRESTORE -w --noflush <<-EOF
|
||||||
*nat
|
*nat
|
||||||
:v2r_${rule}_local_out -
|
:v2r_${rule}_local_out -
|
||||||
-I OUTPUT 1 -p tcp -j v2r_${rule}_local_out
|
-I OUTPUT 1 -p tcp -j v2r_${rule}_local_out
|
||||||
|
@ -243,7 +255,7 @@ v2r_rules_iptchains_init_() {
|
||||||
forward) dst_default_target=v2r_${rule}_forward ;;
|
forward) dst_default_target=v2r_${rule}_forward ;;
|
||||||
bypass|*) dst_default_target=RETURN ;;
|
bypass|*) dst_default_target=RETURN ;;
|
||||||
esac
|
esac
|
||||||
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | iptables-restore -w --noflush
|
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IPTABLESRESTORE -w --noflush
|
||||||
*$table
|
*$table
|
||||||
:v2r_${rule}_pre_src -
|
:v2r_${rule}_pre_src -
|
||||||
:v2r_${rule}_src -
|
:v2r_${rule}_src -
|
||||||
|
@ -287,15 +299,15 @@ v2r_rules_fw_drop() {
|
||||||
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
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "iptables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IPTABLES -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
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
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/drop/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/drop/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "iptables -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IPTABLES -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,18 @@
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if [ -f /usr/sbin/iptables-legacy ]; then
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables-legacy"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-legacy-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save"
|
||||||
|
else
|
||||||
|
IP6TABLES="/usr/sbin/ip6tables"
|
||||||
|
IP6TABLESRESTORE="/usr/sbin/ip6tables-restore"
|
||||||
|
IP6TABLESSAVE="/usr/sbin/ip6tables-save"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v2ray_rules6_usage() {
|
v2ray_rules6_usage() {
|
||||||
cat >&2 <<EOF
|
cat >&2 <<EOF
|
||||||
Usage: v2ray-rules6 [options]
|
Usage: v2ray-rules6 [options]
|
||||||
|
@ -95,7 +107,7 @@ v2ray_rules6_parse_args() {
|
||||||
__errmsg "Requires at least -l or -L option"
|
__errmsg "Requires at least -l or -L option"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [ -n "$o_dst_forward_recentrst" ] && ! ip6tables -w -m recent -h >/dev/null; then
|
if [ -n "$o_dst_forward_recentrst" ] && ! $IP6TABLES -w -m recent -h >/dev/null; then
|
||||||
__errmsg "Please install ip6tables-mod-conntrack-extra with opkg"
|
__errmsg "Please install ip6tables-mod-conntrack-extra with opkg"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -105,7 +117,7 @@ v2ray_rules6_parse_args() {
|
||||||
v2ray_rules6_flush() {
|
v2ray_rules6_flush() {
|
||||||
local setname
|
local setname
|
||||||
|
|
||||||
ip6tables-save --counters | grep -v v2r6_ | ip6tables-restore -w --counters
|
$IP6TABLESSAVE --counters 2>/dev/null | grep -v v2r6_ | $IP6TABLESRESTORE -w --counters
|
||||||
while ip -f inet6 rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
while ip -f inet6 rule del fwmark 1 lookup 100 2>/dev/null; do true; done
|
||||||
ip -f inet6 route flush table 100 || true
|
ip -f inet6 route flush table 100 || true
|
||||||
for setname in $(ipset -n list | grep "ss_rules6_"); do
|
for setname in $(ipset -n list | grep "ss_rules6_"); do
|
||||||
|
@ -149,7 +161,7 @@ v2ray_rules6_iptchains_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
v2ray_rules6_iptchains_init_mark() {
|
v2ray_rules6_iptchains_init_mark() {
|
||||||
ip6tables-restore -w --noflush <<-EOF
|
$IP6TABLESRESTORE -w --noflush <<-EOF
|
||||||
*mangle
|
*mangle
|
||||||
-A PREROUTING -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
-A PREROUTING -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||||
COMMIT
|
COMMIT
|
||||||
|
@ -172,7 +184,7 @@ v2ray_rules6_iptchains_init_tcp() {
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# echo "tcp mangle"
|
# echo "tcp mangle"
|
||||||
# ip6tables-restore -w --noflush <<-EOF
|
# $IP6TABLESRESTORE -w --noflush <<-EOF
|
||||||
# *mangle
|
# *mangle
|
||||||
# :v2r6_${rule}_local_out -
|
# :v2r6_${rule}_local_out -
|
||||||
# -I OUTPUT 1 -p tcp -j v2r6_${rule}_local_out
|
# -I OUTPUT 1 -p tcp -j v2r6_${rule}_local_out
|
||||||
|
@ -232,7 +244,7 @@ v2ray_rules6_iptchains_init_() {
|
||||||
forward) dst_default_target=v2r6_${rule}_forward ;;
|
forward) dst_default_target=v2r6_${rule}_forward ;;
|
||||||
bypass|*) dst_default_target=RETURN ;;
|
bypass|*) dst_default_target=RETURN ;;
|
||||||
esac
|
esac
|
||||||
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | ip6tables-restore -w --noflush
|
sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IP6TABLESRESTORE -w --noflush
|
||||||
*$table
|
*$table
|
||||||
:v2r6_${rule}_pre_src -
|
:v2r6_${rule}_pre_src -
|
||||||
:v2r6_${rule}_src -
|
:v2r6_${rule}_src -
|
||||||
|
@ -279,14 +291,14 @@ v2ray_rules6_fw_drop() {
|
||||||
while IFS=$"\n" read -r c; do
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
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 -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
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
|
while IFS=$"\n" read -r c; do
|
||||||
fwrule=$(echo "$c" | sed 's/drop/REDIRECT --to-ports 65535/')
|
fwrule=$(echo "$c" | sed 's/drop/REDIRECT --to-ports 65535/')
|
||||||
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then
|
||||||
eval "ip6tables -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
eval "$IP6TABLES -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue