mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Merge branch 'test' into develop
This commit is contained in:
commit
bb7d601af6
37 changed files with 3268 additions and 18 deletions
|
@ -75,6 +75,12 @@ if uname.release:sub(1,4) == "5.15" or uname.release:sub(1,1) == "6" then
|
|||
o.datatype = "uinteger"
|
||||
o.rmempty = false
|
||||
o.default = 4
|
||||
|
||||
o = s:option(Value, "mptcp_add_addr_timeout", translate("Set the timeout after which an ADD_ADDR control message will be resent to an MPTCP peer that has not acknowledged a previous ADD_ADDR message."))
|
||||
o.datatype = "uinteger"
|
||||
o.rmempty = false
|
||||
o.default = 120
|
||||
|
||||
else
|
||||
o = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses"))
|
||||
o.datatype = "uinteger"
|
||||
|
|
24
luci-app-zerotier/luasrc/controller/zerotier.lua
Executable file
24
luci-app-zerotier/luasrc/controller/zerotier.lua
Executable file
|
@ -0,0 +1,24 @@
|
|||
module("luci.controller.zerotier", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/zerotier") then
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "vpn"}, firstchild(), "VPN", 45).dependent = false
|
||||
|
||||
entry({"admin", "vpn", "zerotier"}, alias("admin", "vpn", "zerotier", "general"), _("ZeroTier"), 99)
|
||||
|
||||
entry({"admin", "vpn", "zerotier", "general"}, cbi("zerotier/settings"), _("Base Setting"), 1)
|
||||
entry({"admin", "vpn", "zerotier", "log"}, form("zerotier/info"), _("Interface Info"), 2)
|
||||
entry({"admin", "vpn", "zerotier", "manual"}, cbi("zerotier/manual"), _("Manual Config"), 3)
|
||||
|
||||
entry({"admin", "vpn", "zerotier", "status"}, call("act_status"))
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e = {}
|
||||
e.running = luci.sys.call("pgrep /usr/bin/zerotier-one >/dev/null") == 0
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
15
luci-app-zerotier/luasrc/model/cbi/zerotier/info.lua
Executable file
15
luci-app-zerotier/luasrc/model/cbi/zerotier/info.lua
Executable file
|
@ -0,0 +1,15 @@
|
|||
local fs = require "nixio.fs"
|
||||
local conffile = "/tmp/zero.info"
|
||||
|
||||
f = SimpleForm("logview")
|
||||
|
||||
t = f:field(TextValue, "conf")
|
||||
t.rmempty = true
|
||||
t.rows = 19
|
||||
function t.cfgvalue()
|
||||
luci.sys.exec("for i in $(ifconfig | grep 'zt' | awk '{print $1}'); do ifconfig $i; done > /tmp/zero.info")
|
||||
return fs.readfile(conffile) or ""
|
||||
end
|
||||
t.readonly = "readonly"
|
||||
|
||||
return f
|
26
luci-app-zerotier/luasrc/model/cbi/zerotier/manual.lua
Executable file
26
luci-app-zerotier/luasrc/model/cbi/zerotier/manual.lua
Executable file
|
@ -0,0 +1,26 @@
|
|||
local m, s, o
|
||||
local fs = require "nixio.fs"
|
||||
local jsonc = require "luci.jsonc" or nil
|
||||
m = Map("zerotier")
|
||||
s = m:section(NamedSection, "sample_config", "zerotier")
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
o = s:option(TextValue, "manualconfig")
|
||||
o.rows = 20
|
||||
o.wrap = "soft"
|
||||
o.rmempty = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return fs.readfile("/etc/config/zero/local.conf")
|
||||
end
|
||||
o.write = function(self, section, value)
|
||||
fs.writefile("/etc/config/zero/local.conf", value:gsub("\r\n", "\n"))
|
||||
end
|
||||
o.validate = function(self, value)
|
||||
if jsonc == nil or jsonc.parse(value) ~= nil then
|
||||
return value
|
||||
end
|
||||
return nil
|
||||
end
|
||||
o.description =
|
||||
'<a href="https://www.zerotier.com/manual/" target="_blank">https://www.zerotier.com/manual/</a><br><a href="https://github.com/zerotier/ZeroTierOne/blob/dev/service/README.md" target="_blank">https://github.com/zerotier/ZeroTierOne/blob/dev/service/README.md</a>'
|
||||
return m
|
37
luci-app-zerotier/luasrc/model/cbi/zerotier/settings.lua
Executable file
37
luci-app-zerotier/luasrc/model/cbi/zerotier/settings.lua
Executable file
|
@ -0,0 +1,37 @@
|
|||
a = Map("zerotier")
|
||||
a.title = translate("ZeroTier")
|
||||
a.description = translate("Zerotier is an open source, cross-platform and easy to use virtual LAN")
|
||||
|
||||
a:section(SimpleSection).template = "zerotier/zerotier_status"
|
||||
|
||||
t = a:section(NamedSection, "sample_config", "zerotier")
|
||||
t.anonymous = true
|
||||
t.addremove = false
|
||||
|
||||
e = t:option(Flag, "enabled", translate("Enable"))
|
||||
e.default = 0
|
||||
e.rmempty = false
|
||||
|
||||
e = t:option(DynamicList, "join", translate('ZeroTier Network ID'))
|
||||
e.password = true
|
||||
e.rmempty = false
|
||||
|
||||
e = t:option(Flag, "nat", translate("Auto NAT Clients"))
|
||||
e.description = translate("Allow zerotier clients access your LAN network")
|
||||
e.default = 0
|
||||
e.rmempty = false
|
||||
|
||||
e = t:option(MultiValue, "access", translate("Zerotier Access Control"))
|
||||
e.default = "lanfwzt ztfwwan ztfwlan"
|
||||
e.rmempty = false
|
||||
e:value("lanfwzt", translate("LAN Access Zerotier"))
|
||||
e:value("wanfwzt", translate("WAN Access Zerotier"))
|
||||
e:value("ztfwwan", translate("Remote Access WAN"))
|
||||
e:value("ztfwlan", translate("Remote Access LAN"))
|
||||
e.widget = "checkbox"
|
||||
|
||||
e = t:option(DummyValue, "opennewwindow", translate(
|
||||
"<input type=\"button\" class=\"cbi-button cbi-button-apply\" value=\"Zerotier.com\" onclick=\"window.open('https://my.zerotier.com/network')\" />"))
|
||||
e.description = translate("Create or manage your zerotier network, and auth clients who could access")
|
||||
|
||||
return a
|
29
luci-app-zerotier/luasrc/view/zerotier/zerotier_status.htm
Executable file
29
luci-app-zerotier/luasrc/view/zerotier/zerotier_status.htm
Executable file
|
@ -0,0 +1,29 @@
|
|||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(3, '<%=url([[admin]], [[vpn]], [[zerotier]], [[status]])%>', null,
|
||||
function (x, data) {
|
||||
var tb = document.getElementById('zerotier_status');
|
||||
if (data && tb) {
|
||||
if (data.running) {
|
||||
var links = '<em><b><font color=green>Zerotier <%:RUNNING%></font></b></em>';
|
||||
tb.innerHTML = links;
|
||||
} else {
|
||||
tb.innerHTML = '<em><b><font color=red>Zerotier <%:NOT RUNNING%></font></b></em>';
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]>
|
||||
</script>
|
||||
<style>
|
||||
.mar-10 {
|
||||
margin-left: 50px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="zerotier_status">
|
||||
<em>
|
||||
<%:Collecting data...%>
|
||||
</em>
|
||||
</p>
|
||||
</fieldset>
|
35
luci-app-zerotier/po/zh-cn/zerotier.po
Executable file
35
luci-app-zerotier/po/zh-cn/zerotier.po
Executable file
|
@ -0,0 +1,35 @@
|
|||
msgid "Zerotier is an open source, cross-platform and easy to use virtual LAN"
|
||||
msgstr "Zerotier 是一个开源,跨平台,而且适合内网穿透互联的傻瓜配置虚拟 VPN LAN"
|
||||
|
||||
msgid "Auto NAT Clients"
|
||||
msgstr "自动允许客户端 NAT"
|
||||
|
||||
msgid "Allow zerotier clients access your LAN network"
|
||||
msgstr "允许 Zerotier 的拨入客户端访问路由器 LAN 资源(需要在 Zerotier 管理页面设定到 LAN 网段的路由表)"
|
||||
|
||||
msgid "Create or manage your zerotier network, and auth clients who could access"
|
||||
msgstr "点击跳转到 Zerotier 官网管理平台,新建或者管理网络,并允许客户端接入访问你私人网路(新接入的节点默认不允许访问)"
|
||||
|
||||
msgid "Base Setting"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Interface Info"
|
||||
msgstr "接口信息"
|
||||
|
||||
msgid "Zerotier Access Control"
|
||||
msgstr "Zerotier 准入控制"
|
||||
|
||||
msgid "LAN Access Zerotier"
|
||||
msgstr "LAN 可接入 Zerotier"
|
||||
|
||||
msgid "WAN Access Zerotier"
|
||||
msgstr "WAN 可接入 Zerotier"
|
||||
|
||||
msgid "Remote Access WAN"
|
||||
msgstr "外部访问可接入 WAN"
|
||||
|
||||
msgid "Remote Access LAN"
|
||||
msgstr "外部访问可接入 LAN"
|
||||
|
||||
msgid "Manual Config"
|
||||
msgstr "手动设置"
|
1
luci-app-zerotier/po/zh_Hans
Executable file
1
luci-app-zerotier/po/zh_Hans
Executable file
|
@ -0,0 +1 @@
|
|||
zh-cn
|
113
luci-app-zerotier/root/etc/init.d/zerotier
Executable file
113
luci-app-zerotier/root/etc/init.d/zerotier
Executable file
|
@ -0,0 +1,113 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
PROG=/usr/bin/zerotier-one
|
||||
CONFIG_PATH=/var/lib/zerotier-one
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "zerotier"
|
||||
procd_add_interface_trigger "interface.*.up" wan /etc/init.d/zerotier restart
|
||||
}
|
||||
|
||||
section_enabled() {
|
||||
config_get_bool enabled "$1" 'enabled' 0
|
||||
[ $enabled -gt 0 ]
|
||||
}
|
||||
|
||||
start_instance() {
|
||||
local cfg="$1"
|
||||
local port secret config_path
|
||||
local ARGS=""
|
||||
|
||||
if ! section_enabled "$cfg"; then
|
||||
echo "disabled in config"
|
||||
return 1
|
||||
fi
|
||||
|
||||
[ -d /etc/config/zero ] || mkdir -p /etc/config/zero
|
||||
config_path=/etc/config/zero
|
||||
|
||||
config_get_bool port $cfg 'port'
|
||||
config_get secret $cfg 'secret'
|
||||
|
||||
# Remove existing link or folder
|
||||
rm -rf $CONFIG_PATH
|
||||
|
||||
# Create link from CONFIG_PATH to config_path
|
||||
if [ -n "$config_path" -a "$config_path" != $CONFIG_PATH ]; then
|
||||
if [ ! -d "$config_path" ]; then
|
||||
echo "ZeroTier config_path does not exist: $config_path"
|
||||
return
|
||||
fi
|
||||
|
||||
ln -s $config_path $CONFIG_PATH
|
||||
fi
|
||||
|
||||
mkdir -p $CONFIG_PATH/networks.d
|
||||
|
||||
if [ -n "$port" ]; then
|
||||
ARGS="$ARGS -p$port"
|
||||
fi
|
||||
|
||||
if [ "$secret" = "generate" ]; then
|
||||
echo "Generate secret - please wait..."
|
||||
local sf="/tmp/zt.$cfg.secret"
|
||||
|
||||
zerotier-idtool generate "$sf" > /dev/null
|
||||
[ $? -ne 0 ] && return 1
|
||||
|
||||
secret="$(cat $sf)"
|
||||
rm "$sf"
|
||||
|
||||
uci set zerotier.$cfg.secret="$secret"
|
||||
uci commit zerotier
|
||||
fi
|
||||
|
||||
if [ -n "$secret" ]; then
|
||||
echo "$secret" > $CONFIG_PATH/identity.secret
|
||||
# make sure there is not previous identity.public
|
||||
rm -f $CONFIG_PATH/identity.public
|
||||
fi
|
||||
|
||||
add_join() {
|
||||
# an (empty) config file will cause ZT to join a network
|
||||
touch $CONFIG_PATH/networks.d/$1.conf
|
||||
}
|
||||
|
||||
config_list_foreach $cfg 'join' add_join
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $PROG $ARGS $CONFIG_PATH
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load 'zerotier'
|
||||
config_foreach start_instance 'zerotier'
|
||||
touch /tmp/zero.log && /etc/zerotier.start > /tmp/zero.log 2>&1 &
|
||||
}
|
||||
|
||||
stop_instance() {
|
||||
rm -f /tmp/zero.log
|
||||
local cfg="$1"
|
||||
|
||||
/etc/zerotier.stop > /tmp/zero.log 2>&1 &
|
||||
|
||||
# Remove existing link or folder
|
||||
rm -f $CONFIG_PATH/networks.d/*.conf
|
||||
rm -rf $CONFIG_PATH
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
config_load 'zerotier'
|
||||
config_foreach stop_instance 'zerotier'
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
stop
|
||||
start
|
||||
}
|
28
luci-app-zerotier/root/etc/zerotier.start
Executable file
28
luci-app-zerotier/root/etc/zerotier.start
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/sh
|
||||
|
||||
zero_enable="$(uci get zerotier.sample_config.enabled)"
|
||||
|
||||
[ "${zero_enable}" -ne "1" ] && exit 0
|
||||
|
||||
[ -f "/tmp/zero.log" ] && {
|
||||
while [ "$(ifconfig | grep 'zt' | awk '{print $1}')" = "" ]
|
||||
do
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
nat_enable="$(uci get zerotier.sample_config.nat)"
|
||||
zt0="$(ifconfig | grep 'zt' | awk '{print $1}')"
|
||||
echo "${zt0}" > "/tmp/zt.nif"
|
||||
|
||||
[ "${nat_enable}" -eq "1" ] && {
|
||||
for i in ${zt0}
|
||||
do
|
||||
ip_segment=""
|
||||
iptables -I FORWARD -i "$i" -j ACCEPT
|
||||
iptables -I FORWARD -o "$i" -j ACCEPT
|
||||
iptables -t nat -I POSTROUTING -o "$i" -j MASQUERADE
|
||||
ip_segment="$(ip route | grep "dev $i proto kernel" | awk '{print $1}')"
|
||||
iptables -t nat -I POSTROUTING -s "${ip_segment}" -j MASQUERADE
|
||||
done
|
||||
}
|
15
luci-app-zerotier/root/etc/zerotier.stop
Executable file
15
luci-app-zerotier/root/etc/zerotier.stop
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
|
||||
zt0="$(ifconfig | grep 'zt' | awk '{print $1}')"
|
||||
[ -z "${zt0}" ] && zt0="$(cat "/tmp/zt.nif")"
|
||||
|
||||
for i in ${zt0}
|
||||
do
|
||||
ip_segment=""
|
||||
iptables -D FORWARD -i "$i" -j ACCEPT 2>/dev/null
|
||||
iptables -D FORWARD -o "$i" -j ACCEPT 2>/dev/null
|
||||
iptables -t nat -D POSTROUTING -o "$i" -j MASQUERADE 2>/dev/null
|
||||
ip_segment="$(ip route | grep "dev $i proto" | awk '{print $1}')"
|
||||
iptables -t nat -D POSTROUTING -s "${ip_segment}" -j MASQUERADE 2>/dev/null
|
||||
echo "zt interface $i is stopped!"
|
||||
done
|
0
luci-app-zerotier/root/etc/zerotier/zerotier.log
Executable file
0
luci-app-zerotier/root/etc/zerotier/zerotier.log
Executable file
14
luci-theme-openwrt-2020/Makefile
Executable file
14
luci-theme-openwrt-2020/Makefile
Executable file
|
@ -0,0 +1,14 @@
|
|||
#
|
||||
# Copyright (C) 2020 Jo-Philipp Wich <jo@mein.io>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI modern OpenWrt theme
|
||||
LUCI_DEPENDS:=
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
Binary file not shown.
1925
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css
Executable file
1925
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css
Executable file
File diff suppressed because it is too large
Load diff
BIN
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png
Executable file
BIN
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 535 B |
BIN
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png
Executable file
BIN
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
12
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg
Executable file
12
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg
Executable file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="132 132 264 264">
|
||||
<defs>
|
||||
<radialGradient id="g" cx="0%" cy="0%" r="60%">
|
||||
<stop offset=".8" style="stop-opacity:1" />
|
||||
<stop offset="1" style="stop-opacity:.5" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path style="fill:url(#g)" d="M 264 132 A 132 132 0 0 0 132 264 A 132 132 0 0 0 264 396 A 132 132 0 0 0 396 264 A 132 132 0 0 0 264 132 z M 264 170 A 94 94 0 0 1 359 264 A 94 94 0 0 1 264 359 A 94 94 0 0 1 170 264 A 94 94 0 0 1 264 170 z " />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 582 B |
147
luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js
Executable file
147
luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js
Executable file
|
@ -0,0 +1,147 @@
|
|||
'use strict';
|
||||
'require baseclass';
|
||||
'require ui';
|
||||
|
||||
return baseclass.extend({
|
||||
__init__: function() {
|
||||
ui.menu.load().then(L.bind(this.render, this));
|
||||
},
|
||||
|
||||
render: function(tree) {
|
||||
var node = tree,
|
||||
url = '';
|
||||
|
||||
this.renderModeMenu(node);
|
||||
|
||||
if (L.env.dispatchpath.length >= 3) {
|
||||
for (var i = 0; i < 3 && node; i++) {
|
||||
node = node.children[L.env.dispatchpath[i]];
|
||||
url = url + (url ? '/' : '') + L.env.dispatchpath[i];
|
||||
}
|
||||
|
||||
if (node)
|
||||
this.renderTabMenu(node, url);
|
||||
}
|
||||
|
||||
document.querySelector('#menubar > .navigation')
|
||||
.addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle'));
|
||||
},
|
||||
|
||||
handleMenuExpand: function(ev) {
|
||||
var a = ev.target, ul1 = a.parentNode.parentNode, ul2 = a.nextElementSibling;
|
||||
|
||||
document.querySelectorAll('ul.mainmenu.l1 > li.active').forEach(function(li) {
|
||||
if (li !== a.parentNode)
|
||||
li.classList.remove('active');
|
||||
});
|
||||
|
||||
if (!ul2)
|
||||
return;
|
||||
|
||||
if (ul2.parentNode.offsetLeft + ul2.offsetWidth <= ul1.offsetLeft + ul1.offsetWidth)
|
||||
ul2.classList.add('align-left');
|
||||
|
||||
ul1.classList.add('active');
|
||||
a.parentNode.classList.add('active');
|
||||
a.blur();
|
||||
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
},
|
||||
|
||||
renderMainMenu: function(tree, url, level) {
|
||||
var l = (level || 0) + 1,
|
||||
ul = E('ul', { 'class': 'mainmenu l%d'.format(l) }),
|
||||
children = ui.menu.getChildren(tree);
|
||||
|
||||
if (children.length == 0 || l > 2)
|
||||
return E([]);
|
||||
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
var isActive = (L.env.dispatchpath[l] == children[i].name),
|
||||
isReadonly = children[i].readonly,
|
||||
activeClass = 'mainmenu-item-%s%s'.format(children[i].name, isActive ? ' selected' : '');
|
||||
|
||||
ul.appendChild(E('li', { 'class': activeClass }, [
|
||||
E('a', {
|
||||
'href': L.url(url, children[i].name),
|
||||
'click': (l == 1) ? ui.createHandlerFn(this, 'handleMenuExpand') : null
|
||||
}, [ _(children[i].title) ]),
|
||||
this.renderMainMenu(children[i], url + '/' + children[i].name, l)
|
||||
]));
|
||||
}
|
||||
|
||||
if (l == 1)
|
||||
document.querySelector('#mainmenu').appendChild(E('div', [ ul ]));
|
||||
|
||||
return ul;
|
||||
},
|
||||
|
||||
renderModeMenu: function(tree) {
|
||||
var menu = document.querySelector('#modemenu'),
|
||||
children = ui.menu.getChildren(tree);
|
||||
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[0] : i == 0);
|
||||
|
||||
if (i > 0)
|
||||
menu.appendChild(E([], ['\u00a0|\u00a0']));
|
||||
|
||||
menu.appendChild(E('div', { 'class': isActive ? 'active' : null }, [
|
||||
E('a', { 'href': L.url(children[i].name) }, [ _(children[i].title) ])
|
||||
]));
|
||||
|
||||
if (isActive)
|
||||
this.renderMainMenu(children[i], children[i].name);
|
||||
}
|
||||
|
||||
if (menu.children.length > 1)
|
||||
menu.style.display = '';
|
||||
},
|
||||
|
||||
renderTabMenu: function(tree, url, level) {
|
||||
var container = document.querySelector('#tabmenu'),
|
||||
l = (level || 0) + 1,
|
||||
ul = E('ul', { 'class': 'cbi-tabmenu' }),
|
||||
children = ui.menu.getChildren(tree),
|
||||
activeNode = null;
|
||||
|
||||
if (children.length == 0)
|
||||
return E([]);
|
||||
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
var isActive = (L.env.dispatchpath[l + 2] == children[i].name),
|
||||
activeClass = isActive ? ' cbi-tab' : '',
|
||||
className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass);
|
||||
|
||||
ul.appendChild(E('li', { 'class': className }, [
|
||||
E('a', { 'href': L.url(url, children[i].name) }, [ _(children[i].title) ] )
|
||||
]));
|
||||
|
||||
if (isActive)
|
||||
activeNode = children[i];
|
||||
}
|
||||
|
||||
container.appendChild(ul);
|
||||
container.style.display = '';
|
||||
|
||||
if (activeNode)
|
||||
container.appendChild(this.renderTabMenu(activeNode, url + '/' + activeNode.name, l));
|
||||
|
||||
return ul;
|
||||
},
|
||||
|
||||
handleSidebarToggle: function(ev) {
|
||||
var btn = ev.currentTarget,
|
||||
bar = document.querySelector('#mainmenu');
|
||||
|
||||
if (btn.classList.contains('active')) {
|
||||
btn.classList.remove('active');
|
||||
bar.classList.remove('active');
|
||||
}
|
||||
else {
|
||||
btn.classList.add('active');
|
||||
bar.classList.add('active');
|
||||
}
|
||||
}
|
||||
});
|
17
luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm
Executable file
17
luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm
Executable file
|
@ -0,0 +1,17 @@
|
|||
<%#
|
||||
Copyright 2020 Jo-Philipp Wich <jo@mein.io>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="luci">
|
||||
<% local ver = require "luci.version" -%>
|
||||
Powered by <%= ver.luciname %> (<%= ver.luciversion %>)
|
||||
</p>
|
||||
|
||||
<script type="text/javascript">L.require('menu-openwrt2020')</script>
|
||||
|
||||
</body>
|
||||
</html>
|
63
luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm
Executable file
63
luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm
Executable file
|
@ -0,0 +1,63 @@
|
|||
<%#
|
||||
Copyright 2020 Jo-Philipp Wich <jo@mein.io>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
<%
|
||||
local sys = require "luci.sys"
|
||||
local util = require "luci.util"
|
||||
local http = require "luci.http"
|
||||
local disp = require "luci.dispatcher"
|
||||
local ver = require "luci.version"
|
||||
|
||||
local boardinfo = util.ubus("system", "board") or { }
|
||||
|
||||
local node = disp.context.dispatched
|
||||
local path = table.concat(disp.context.path, "-")
|
||||
|
||||
http.prepare_content("text/html; charset=UTF-8")
|
||||
-%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<%=luci.i18n.context.lang%>">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
|
||||
<link rel="icon" href="<%=media%>/favicon.png" type="image/svg+xml" />
|
||||
<script type="text/javascript" src="<%=url('admin/translations', luci.i18n.context.lang)%><%# ?v=PKG_VERSION %>"></script>
|
||||
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
|
||||
<title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
|
||||
</head>
|
||||
<body class="lang_<%=luci.i18n.context.lang%>" data-page="<%= pcdata(path) %>">
|
||||
|
||||
<p class="skiplink">
|
||||
<span id="skiplink1"><a href="#navigation"><%:Skip to navigation%></a></span>
|
||||
<span id="skiplink2"><a href="#content"><%:Skip to content%></a></span>
|
||||
</p>
|
||||
|
||||
<div id="menubar">
|
||||
<h2 class="navigation"><a id="navigation" name="navigation"><%:Navigation%></a></h2>
|
||||
|
||||
<span class="hostname"><a href="/"><%=(boardinfo.hostname or "?")%></a></span>
|
||||
<span class="distversion"><%=ver.distversion%></span>
|
||||
<span id="indicators"></span>
|
||||
</div>
|
||||
|
||||
<div id="modemenu" style="display:none"></div>
|
||||
|
||||
<div id="maincontainer">
|
||||
<div id="mainmenu"></div>
|
||||
|
||||
<div id="maincontent">
|
||||
<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") and category ~= "failsafe" and path ~= "admin-system-admin-password" then -%>
|
||||
<div class="alert-message warning">
|
||||
<h4><%:No password set!%></h4>
|
||||
<p><%:There is no password set on this router. Please configure a root password to protect the web interface.%></p>
|
||||
<% if disp.lookup("admin/system/admin") then %>
|
||||
<div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
|
||||
<% end %>
|
||||
</div>
|
||||
<%- end -%>
|
||||
|
||||
<div id="tabmenu" style="display:none"></div>
|
|
@ -8,25 +8,25 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=modemmanager
|
||||
PKG_SOURCE_VERSION:=1.20.4
|
||||
PKG_RELEASE:=1
|
||||
PKG_SOURCE_VERSION:=1.20.6
|
||||
PKG_RELEASE:=8
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git
|
||||
#PKG_MIRROR_HASH:=f138effc693456c5040ec22e17c0a8b41143c3b17b62437462995c297a9150dc
|
||||
PKG_MIRROR_HASH:=e90103e2e42bb826bbbac83937a9a69f50348cd6ce0d8da655a12b65494ce7c9
|
||||
|
||||
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_BUILD_DEPENDS:=glib2/host libxslt/host
|
||||
PKG_BUILD_FLAGS:=gc-sections
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/nls.mk
|
||||
include $(INCLUDE_DIR)/meson.mk
|
||||
|
||||
TARGET_CFLAGS += -ffunction-sections -fdata-sections -fno-merge-all-constants -fmerge-constants
|
||||
TARGET_LDFLAGS += -Wl,--gc-sections
|
||||
TARGET_CFLAGS += -fno-merge-all-constants -fmerge-constants
|
||||
|
||||
define Package/modemmanager/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
|
|
|
@ -272,6 +272,14 @@ mm_report_event() {
|
|||
local subsystem="$3"
|
||||
local sysfspath="$4"
|
||||
|
||||
# Do not save virtual devices
|
||||
local virtual
|
||||
virtual="$(echo "$sysfspath" | cut -d'/' -f4)"
|
||||
[ "$virtual" = "virtual" ] && {
|
||||
mm_log "debug" "sysfspath is a virtual device ($sysfspath)"
|
||||
return
|
||||
}
|
||||
|
||||
# Track/untrack events in cache
|
||||
case "${action}" in
|
||||
"add")
|
||||
|
|
|
@ -343,11 +343,22 @@ proto_modemmanager_init_config() {
|
|||
proto_config_add_string password
|
||||
proto_config_add_string pincode
|
||||
proto_config_add_string iptype
|
||||
proto_config_add_string plmn
|
||||
proto_config_add_int signalrate
|
||||
proto_config_add_boolean lowpower
|
||||
proto_config_add_boolean allow_roaming
|
||||
proto_config_add_defaults
|
||||
}
|
||||
|
||||
# Append param to the global 'connectargs' variable.
|
||||
append_param() {
|
||||
local param="$1"
|
||||
|
||||
[ -z "$param" ] && return
|
||||
[ -z "$connectargs" ] || connectargs="${connectargs},"
|
||||
connectargs="${connectargs}${param}"
|
||||
}
|
||||
|
||||
proto_modemmanager_setup() {
|
||||
local interface="$1"
|
||||
|
||||
|
@ -355,11 +366,11 @@ proto_modemmanager_setup() {
|
|||
local bearermethod_ipv4 bearermethod_ipv6 auth cliauth
|
||||
local operatorname operatorid registration accesstech signalquality
|
||||
|
||||
local device apn allowedauth username password pincode iptype metric signalrate
|
||||
local device apn allowedauth username password pincode iptype plmn metric signalrate allow_roaming
|
||||
|
||||
local address prefix gateway mtu dns1 dns2
|
||||
|
||||
json_get_vars device apn allowedauth username password pincode iptype metric signalrate
|
||||
json_get_vars device apn allowedauth username password pincode iptype plmn metric signalrate allow_roaming
|
||||
|
||||
# validate sysfs path given in config
|
||||
[ -n "${device}" ] || {
|
||||
|
@ -368,11 +379,6 @@ proto_modemmanager_setup() {
|
|||
proto_set_available "${interface}" 0
|
||||
return 1
|
||||
}
|
||||
[ -e "${device}" ] || {
|
||||
echo "Device not found in sysfs"
|
||||
proto_set_available "${interface}" 0
|
||||
return 1
|
||||
}
|
||||
|
||||
# validate that ModemManager is handling the modem at the sysfs path
|
||||
modemstatus=$(mmcli --modem="${device}" --output-keyvalue)
|
||||
|
@ -397,7 +403,24 @@ proto_modemmanager_setup() {
|
|||
echo "starting connection with apn '${apn}'..."
|
||||
proto_notify_error "${interface}" MM_CONNECT_IN_PROGRESS
|
||||
|
||||
connectargs="apn=${apn}${iptype:+,ip-type=${iptype}}${cliauth:+,allowed-auth=${cliauth}}${username:+,user=${username}}${password:+,password=${password}}${pincode:+,pin=${pincode}}"
|
||||
# setup allow-roaming parameter
|
||||
if [ -n "${allow_roaming}" ] && [ "${allow_roaming}" -eq 0 ];then
|
||||
allow_roaming="no"
|
||||
else
|
||||
# allowed unless a user set the opposite
|
||||
allow_roaming="yes"
|
||||
fi
|
||||
|
||||
# Append options to 'connectargs' variable
|
||||
append_param "apn=${apn}"
|
||||
append_param "allow-roaming=${allow_roaming}"
|
||||
append_param "${iptype:+ip-type=${iptype}}"
|
||||
append_param "${plmn:+operator-id=${plmn}}"
|
||||
append_param "${cliauth:+allowed-auth=${cliauth}}"
|
||||
append_param "${username:+user=${username}}"
|
||||
append_param "${password:+password=${password}}"
|
||||
append_param "${pincode:+pin=${pincode}}"
|
||||
|
||||
mmcli --modem="${device}" --timeout 120 --simple-connect="${connectargs}" || {
|
||||
proto_notify_error "${interface}" MM_CONNECT_FAILED
|
||||
proto_block_restart "${interface}"
|
||||
|
@ -509,7 +532,6 @@ proto_modemmanager_teardown() {
|
|||
json_get_vars device lowpower iptype
|
||||
|
||||
echo "stopping network"
|
||||
proto_notify_error "${interface}" MM_TEARDOWN_IN_PROGRESS
|
||||
|
||||
# load connected bearer information, just the first one should be ok
|
||||
modemstatus=$(mmcli --modem="${device}" --output-keyvalue)
|
||||
|
@ -544,6 +566,9 @@ proto_modemmanager_teardown() {
|
|||
# low power, only if requested
|
||||
[ "${lowpower:-0}" -lt 1 ] ||
|
||||
mmcli --modem="${device}" --set-power-state-low
|
||||
|
||||
proto_init_update "*" 0
|
||||
proto_send_update "$interface"
|
||||
}
|
||||
|
||||
[ -n "$INCLUDE_ONLY" ] || {
|
||||
|
|
190
ndpi-netfilter2/patches/002-no-livepatch-required.patch
Executable file
190
ndpi-netfilter2/patches/002-no-livepatch-required.patch
Executable file
|
@ -0,0 +1,190 @@
|
|||
From 9e2bc31b8c330dc6ad0e6e478103652cd72dc3c8 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Gottschall <s.gottschall@dd-wrt.com>
|
||||
Date: Sun, 9 Jul 2023 12:22:02 +0600
|
||||
Subject: [PATCH] add ndpi support for arm/arm64 etc. in 6.1
|
||||
|
||||
ndpi is not supported in more recent kernels without livepatch support
|
||||
however. livepatch is only supported for x86_64 architectures.
|
||||
so ndpi cannot be used on any other platform anymore.
|
||||
we solve this by adding a simple hook to nf_ct_destroy
|
||||
|
||||
Signed-off-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
|
||||
---
|
||||
ndpi-netfilter/kernel-patch/v6.1.38.diff | 81 ++++++++++++++++++++++++
|
||||
ndpi-netfilter/src/main.c | 23 +++++--
|
||||
2 files changed, 98 insertions(+), 6 deletions(-)
|
||||
create mode 100644 ndpi-netfilter/kernel-patch/v6.1.38.diff
|
||||
|
||||
diff --git a/ndpi-netfilter/kernel-patch/v6.1.38.diff b/ndpi-netfilter/kernel-patch/v6.1.38.diff
|
||||
new file mode 100644
|
||||
index 0000000000..6846dc84fc
|
||||
--- /dev/null
|
||||
+++ b/ndpi-netfilter/kernel-patch/v6.1.38.diff
|
||||
@@ -0,0 +1,81 @@
|
||||
+diff -urpN linux-6.1.38.old/include/net/netfilter/nf_conntrack.h linux-6.1.38/include/net/netfilter/nf_conntrack.h
|
||||
+--- linux-6.1.38.old/include/net/netfilter/nf_conntrack.h 2023-07-05 23:27:38.000000000 +0600
|
||||
++++ linux-6.1.38/include/net/netfilter/nf_conntrack.h 2023-07-14 12:34:56.663750711 +0600
|
||||
+@@ -362,6 +362,11 @@ static inline struct nf_conntrack_net *n
|
||||
+ return net_generic(net, nf_conntrack_net_id);
|
||||
+ }
|
||||
+
|
||||
++#ifdef CONFIG_NDPI_HOOK
|
||||
++void register_ndpi_hook(void (*hook)(struct nf_conn *));
|
||||
++void unregister_ndpi_hook(void);
|
||||
++#endif
|
||||
++
|
||||
+ #define NF_CT_STAT_INC(net, count) __this_cpu_inc((net)->ct.stat->count)
|
||||
+ #define NF_CT_STAT_INC_ATOMIC(net, count) this_cpu_inc((net)->ct.stat->count)
|
||||
+ #define NF_CT_STAT_ADD_ATOMIC(net, count, v) this_cpu_add((net)->ct.stat->count, (v))
|
||||
+diff -urpN linux-6.1.38.old/net/netfilter/Kconfig linux-6.1.38/net/netfilter/Kconfig
|
||||
+--- linux-6.1.38.old/net/netfilter/Kconfig 2023-07-05 23:27:38.000000000 +0600
|
||||
++++ linux-6.1.38/net/netfilter/Kconfig 2023-07-14 12:34:11.966879899 +0600
|
||||
+@@ -76,11 +76,15 @@ config NETFILTER_NETLINK_OSF
|
||||
+ If this option is enabled, the kernel will include support
|
||||
+ for passive OS fingerprint via NFNETLINK.
|
||||
+
|
||||
++config NDPI_HOOK
|
||||
++ bool
|
||||
++
|
||||
+ config NF_CONNTRACK
|
||||
+ tristate "Netfilter connection tracking support"
|
||||
+ default m if NETFILTER_ADVANCED=n
|
||||
+ select NF_DEFRAG_IPV4
|
||||
+ select NF_DEFRAG_IPV6 if IPV6 != n
|
||||
++ select NDPI_HOOK
|
||||
+ help
|
||||
+ Connection tracking keeps a record of what packets have passed
|
||||
+ through your machine, in order to figure out how they are related
|
||||
+diff -urpN linux-6.1.38.old/net/netfilter/nf_conntrack_core.c linux-6.1.38/net/netfilter/nf_conntrack_core.c
|
||||
+--- linux-6.1.38.old/net/netfilter/nf_conntrack_core.c 2023-07-05 23:27:38.000000000 +0600
|
||||
++++ linux-6.1.38/net/netfilter/nf_conntrack_core.c 2023-07-14 12:33:45.580092713 +0600
|
||||
+@@ -582,9 +582,30 @@ static void destroy_gre_conntrack(struct
|
||||
+ #endif
|
||||
+ }
|
||||
+
|
||||
++#ifdef CONFIG_NDPI_HOOK
|
||||
++
|
||||
++static void (*ndpi_hook)(struct nf_conn *) __rcu __read_mostly = NULL;
|
||||
++
|
||||
++void register_ndpi_hook(void (*hook)(struct nf_conn *))
|
||||
++{
|
||||
++ rcu_assign_pointer(ndpi_hook, hook);
|
||||
++}
|
||||
++EXPORT_SYMBOL(register_ndpi_hook);
|
||||
++
|
||||
++void unregister_ndpi_hook(void)
|
||||
++{
|
||||
++ rcu_assign_pointer(ndpi_hook, NULL);
|
||||
++}
|
||||
++
|
||||
++EXPORT_SYMBOL(unregister_ndpi_hook);
|
||||
++#endif
|
||||
++
|
||||
+ void nf_ct_destroy(struct nf_conntrack *nfct)
|
||||
+ {
|
||||
+ struct nf_conn *ct = (struct nf_conn *)nfct;
|
||||
++#ifdef CONFIG_NDPI_HOOK
|
||||
++ void (*hook)(struct nf_conn *);
|
||||
++#endif
|
||||
+
|
||||
+ pr_debug("%s(%p)\n", __func__, ct);
|
||||
+ WARN_ON(refcount_read(&nfct->use) != 0);
|
||||
+@@ -594,6 +615,12 @@ void nf_ct_destroy(struct nf_conntrack *
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
++#ifdef CONFIG_NDPI_HOOK
|
||||
++ hook = rcu_dereference(ndpi_hook);
|
||||
++ if (hook)
|
||||
++ hook(ct);
|
||||
++#endif
|
||||
++
|
||||
+ if (unlikely(nf_ct_protonum(ct) == IPPROTO_GRE))
|
||||
+ destroy_gre_conntrack(ct);
|
||||
+
|
||||
diff --git a/ndpi-netfilter/src/main.c b/ndpi-netfilter/src/main.c
|
||||
index 024ca4bb79..e8ae3912d7 100644
|
||||
--- a/ndpi-netfilter/src/main.c
|
||||
+++ b/ndpi-netfilter/src/main.c
|
||||
@@ -102,7 +102,9 @@ static char proto_name[]="proto";
|
||||
static char debug_name[]="debug";
|
||||
static char risk_name[]="risks";
|
||||
|
||||
-#if LINUX_VERSION_CODE > KERNEL_VERSION(5,19,0)
|
||||
+#ifdef CONFIG_NDPI_HOOK
|
||||
+#define USE_NDPI_HOOK
|
||||
+#elif LINUX_VERSION_CODE > KERNEL_VERSION(5,19,0)
|
||||
#ifndef USE_LIVEPATCH
|
||||
#define USE_LIVEPATCH
|
||||
#endif
|
||||
@@ -162,15 +164,17 @@ static inline const struct net_device *xt_out(const struct xt_action_param *par)
|
||||
// for testing only!
|
||||
// #define USE_CONNLABELS
|
||||
|
||||
-#if !defined(USE_CONNLABELS) && defined(CONFIG_NF_CONNTRACK_CUSTOM) && CONFIG_NF_CONNTRACK_CUSTOM > 0
|
||||
+#if !defined(USE_CONNLABELS) && !defined(USE_NDPI_HOOK) && defined(CONFIG_NF_CONNTRACK_CUSTOM) && CONFIG_NF_CONNTRACK_CUSTOM > 0
|
||||
#define NF_CT_CUSTOM
|
||||
#else
|
||||
+#ifndef USE_NDPI_HOOK
|
||||
#undef NF_CT_CUSTOM
|
||||
#include <net/netfilter/nf_conntrack_labels.h>
|
||||
#ifndef CONFIG_NF_CONNTRACK_LABELS
|
||||
#error NF_CONNTRACK_LABELS not defined
|
||||
#endif
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)
|
||||
#define nf_ct_l3proto_try_module_get(a) 0
|
||||
@@ -3187,7 +3191,7 @@ static int __net_init ndpi_net_init(struct net *net)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
-#ifndef USE_LIVEPATCH
|
||||
+#if !defined(USE_LIVEPATCH) && !defined(USE_NDPI_HOOK)
|
||||
static struct nf_ct_ext_type ndpi_extend = {
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
|
||||
.seq_print = seq_print_ndpi,
|
||||
@@ -3197,7 +3201,7 @@ static struct nf_ct_ext_type ndpi_extend = {
|
||||
.align = __alignof__(uint32_t),
|
||||
.id = 0,
|
||||
};
|
||||
-#else
|
||||
+#elif !defined(USE_NDPI_HOOK)
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
|
||||
#error "not implemented"
|
||||
@@ -3266,6 +3270,8 @@ static int __init ndpi_mt_init(void)
|
||||
return -EBUSY;
|
||||
}
|
||||
nf_ct_ext_id_ndpi = ndpi_extend.id;
|
||||
+#elif defined(USE_NDPI_HOOK)
|
||||
+ register_ndpi_hook(&nf_ndpi_free_flow);
|
||||
#else
|
||||
#ifdef USE_LIVEPATCH
|
||||
nf_ct_ext_id_ndpi = NF_CT_EXT_LABELS;
|
||||
@@ -3389,8 +3395,11 @@ static int __init ndpi_mt_init(void)
|
||||
unreg_pernet:
|
||||
unregister_pernet_subsys(&ndpi_net_ops);
|
||||
unreg_ext:
|
||||
-#ifndef USE_LIVEPATCH
|
||||
+#if !defined(USE_LIVEPATCH) && !defined(USE_NDPI_HOOK)
|
||||
nf_ct_extend_unregister(&ndpi_extend);
|
||||
+#endif
|
||||
+#if defined(USE_NDPI_HOOK)
|
||||
+ unregister_ndpi_hook();
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
@@ -3401,8 +3410,10 @@ static void __exit ndpi_mt_exit(void)
|
||||
xt_unregister_target(&ndpi_tg_reg);
|
||||
xt_unregister_match(&ndpi_mt_reg);
|
||||
unregister_pernet_subsys(&ndpi_net_ops);
|
||||
-#ifndef USE_LIVEPATCH
|
||||
+#if !defined(USE_LIVEPATCH) && !defined(USE_NDPI_HOOK)
|
||||
nf_ct_extend_unregister(&ndpi_extend);
|
||||
+#elif defined(USE_NDPI_HOOK)
|
||||
+ unregister_ndpi_hook();
|
||||
#else
|
||||
rcu_assign_pointer(nf_conntrack_destroy_cb,NULL);
|
||||
#endif
|
237
ndpi-netfilter2/patches/003-bittorrent-compilation-remove-ipv6.patch
Executable file
237
ndpi-netfilter2/patches/003-bittorrent-compilation-remove-ipv6.patch
Executable file
|
@ -0,0 +1,237 @@
|
|||
--- a/src/lib/protocols/bittorrent.c.old 2023-07-15 11:45:44.566446059 +0200
|
||||
+++ b/src/lib/protocols/bittorrent.c 2023-07-15 11:49:25.498828807 +0200
|
||||
@@ -263,19 +263,6 @@
|
||||
return key % (size-1);
|
||||
}
|
||||
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
-static inline u_int32_t hash_calc6(ndpi_ip_addr_t *ip,u_int16_t port,u_int32_t size) {
|
||||
- u_int32_t M,I;
|
||||
- u_int8_t *ipp = (u_int8_t *)&I;
|
||||
- u_int32_t key;
|
||||
- M=103;
|
||||
- I = ip->ipv6.u6_addr.u6_addr32[0] + ip->ipv6.u6_addr.u6_addr32[1] + ip->ipv6.u6_addr.u6_addr32[2] + ip->ipv6.u6_addr.u6_addr32[3];
|
||||
- key = (((ipp[0] * M) + ipp[1] * M) + ipp[2]) * M +ipp[3];
|
||||
- ipp = (u_int8_t *)&port;
|
||||
- key = ((key * M) + ipp[0] * M) + ipp[1];
|
||||
- return key % (size-1);
|
||||
-}
|
||||
-#endif
|
||||
|
||||
// ndpi_ip_addr_t
|
||||
static struct hash_ip4p_node *hash_ip4p_add(struct hash_ip4p_table *ht,
|
||||
@@ -283,9 +270,6 @@
|
||||
struct hash_ip4p_node *n,*t;
|
||||
|
||||
u_int32_t key =
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- ht->ipv6 ? hash_calc6(ip,port,ht->size) :
|
||||
-#endif
|
||||
hash_calc(ip,port,ht->size);
|
||||
|
||||
n = NULL;
|
||||
@@ -293,22 +277,6 @@
|
||||
spin_lock(&ht->tbl[key].lock);
|
||||
|
||||
n = ht->tbl[key].top;
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- if(ht->ipv6) {
|
||||
- while(n) {
|
||||
- if(!memcmp(&n->ip,ip->ipv6.u6_addr.u6_addr8,16) && n->port == port) {
|
||||
- n->lchg = lchg;
|
||||
- n->flag |= flag;
|
||||
- move_up(&ht->tbl[key],n);
|
||||
- goto unlock;
|
||||
- }
|
||||
- n = n->next;
|
||||
- }
|
||||
- n = BT_N_MALLOC(sizeof(struct hash_ip4p_node)+12);
|
||||
- if(!n) goto unlock;
|
||||
- memcpy(&n->ip,ip->ipv6.u6_addr.u6_addr8,16);
|
||||
- } else {
|
||||
-#endif
|
||||
while(n) {
|
||||
if(n->ip == ip->ipv4 && n->port == port) {
|
||||
n->lchg = lchg;
|
||||
@@ -321,9 +289,6 @@
|
||||
n = BT_N_MALLOC(sizeof(struct hash_ip4p_node));
|
||||
if(!n) goto unlock;
|
||||
n->ip = ip->ipv4;
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- }
|
||||
-#endif
|
||||
t = ht->tbl[key].top;
|
||||
n->next = t;
|
||||
n->prev = NULL;
|
||||
@@ -347,31 +312,16 @@
|
||||
struct hash_ip4p_node *n;
|
||||
|
||||
u_int16_t key =
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- ht->ipv6 ? hash_calc6(ip,port,ht->size) :
|
||||
-#endif
|
||||
hash_calc(ip,port,ht->size);
|
||||
|
||||
n = NULL;
|
||||
spin_lock(&ht->tbl[key].lock);
|
||||
|
||||
n = ht->tbl[key].top;
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- if(ht->ipv6) {
|
||||
- while(n) {
|
||||
- if(!memcmp(&n->ip,ip->ipv6.u6_addr.u6_addr8,16) && n->port == port)
|
||||
- break;
|
||||
- n = n->next;
|
||||
- }
|
||||
- } else {
|
||||
-#endif
|
||||
while(n) {
|
||||
if(n->ip == ip->ipv4 && n->port == port) break;
|
||||
n = n->next;
|
||||
}
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- }
|
||||
-#endif
|
||||
if(n) {
|
||||
#ifdef __KERNEL__
|
||||
diagram(ndpi_btp_tm,sizeof(ndpi_btp_tm)/sizeof(ndpi_btp_tm[0]),lchg - n->lchg);
|
||||
@@ -805,13 +755,6 @@
|
||||
u_int16_t s_port = packet->udp ? packet->udp->source :
|
||||
packet->tcp ? packet->tcp->source : 0;
|
||||
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- if(packet->iphv6)
|
||||
- bt_add_announce(ndpi_struct,
|
||||
- ndpi_struct->bt_ann, ndpi_struct->bt_ann_len,
|
||||
- 1, (ndpi_ip_addr_t *)&packet->iphv6->ip6_src,
|
||||
- s_port, &x.p,p_now);
|
||||
-#endif
|
||||
if(packet->iph)
|
||||
bt_add_announce(ndpi_struct,
|
||||
ndpi_struct->bt_ann, ndpi_struct->bt_ann_len,
|
||||
@@ -819,39 +762,6 @@
|
||||
s_port, &x.p,p_now);
|
||||
}
|
||||
#endif
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
-if(packet->iphv6 && ndpi_struct->bt6_ht) {
|
||||
-NDPI_LOG_DBG2(ndpi_struct,
|
||||
- "BT: detected valid DHT6 %d %d\n",
|
||||
- x.p.r.nn6,x.p.r.nv6);
|
||||
-#ifndef __KERNEL__
|
||||
-if(bt_parse_debug) dump_bt_proto_struct(&x.p);
|
||||
-#endif
|
||||
- if(x.p.r.nodes6 && x.p.r.nn6) {
|
||||
- struct bt_nodes6_data *n = x.p.r.nodes6;
|
||||
- for(i=0; i < x.p.r.nn6; i++,n++) {
|
||||
- hash_ip4p_add(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&n->ip,n->port,p_now,0x2);
|
||||
-
|
||||
- NDPI_LOG_DBG2(ndpi_struct,
|
||||
- "BT: nodes6 add DHT peer %s:%d\n",
|
||||
- inet_ntop(AF_INET6,(void *)&n->ip, ip6buf,sizeof(ip6buf)),
|
||||
- htons(n->port));
|
||||
- }
|
||||
- }
|
||||
- if(x.p.r.values6 && x.p.r.nv6) {
|
||||
- struct bt_ipv6p2 *n = (struct bt_ipv6p2 *)x.p.r.values6;
|
||||
- for(i=0; i < x.p.r.nv6; i++,n++) {
|
||||
- hash_ip4p_add(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&n->d.ip,n->d.port,p_now,0x4);
|
||||
-
|
||||
- NDPI_LOG_DBG2(ndpi_struct,
|
||||
- "BT: values6 add DHT peer %s:%d\n",
|
||||
- inet_ntop(AF_INET6,(void *)&n->d.ip, ip6buf,sizeof(ip6buf)),
|
||||
- htons(n->d.port));
|
||||
- }
|
||||
- }
|
||||
- return r >= 0;
|
||||
-}
|
||||
-#endif
|
||||
|
||||
if(!ndpi_struct->bt_ht) return r >= 0;
|
||||
|
||||
@@ -899,16 +809,6 @@
|
||||
static void ndpi_bt_add_peer_cache(struct ndpi_detection_module_struct *ndpi_struct,
|
||||
struct ndpi_packet_struct *packet, uint16_t p_src, uint16_t p_dst) {
|
||||
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- if(ndpi_struct->bt6_ht && packet->iphv6) {
|
||||
- if(packet->packet_direction)
|
||||
- hash_ip4p_add(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&packet->iphv6->ip6_src,
|
||||
- p_src, packet->current_time,1);
|
||||
- else
|
||||
- hash_ip4p_add(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&packet->iphv6->ip6_dst,
|
||||
- p_dst, packet->current_time,1);
|
||||
- } else
|
||||
-#endif
|
||||
if(ndpi_struct->bt_ht && packet->iph) {
|
||||
if(packet->packet_direction)
|
||||
hash_ip4p_add(ndpi_struct->bt_ht,(ndpi_ip_addr_t *)&packet->iph->saddr,
|
||||
@@ -1073,19 +973,6 @@
|
||||
if(!packet->tcp) return 0;
|
||||
source = packet->tcp->source;
|
||||
dest = packet->tcp->dest;
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- if(ndpi_struct->bt6_ht && packet->iphv6) {
|
||||
- f1 = hash_ip4p_find(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&packet->iphv6->ip6_src,source,
|
||||
- packet->current_time);
|
||||
- f2 = hash_ip4p_find(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&packet->iphv6->ip6_dst,dest,
|
||||
- packet->current_time);
|
||||
-#ifdef __KERNEL__
|
||||
- if(f1) ndpi_ptss++;
|
||||
- if(f2) ndpi_ptdd++;
|
||||
-#endif
|
||||
- return f1 != NULL || f2 != NULL;
|
||||
- }
|
||||
-#endif
|
||||
if(ndpi_struct->bt_ht && packet->iph) {
|
||||
f1 = hash_ip4p_find(ndpi_struct->bt_ht,(ndpi_ip_addr_t *)&packet->iph->saddr,source,
|
||||
packet->current_time);
|
||||
@@ -1110,23 +997,6 @@
|
||||
if(!packet->udp) return 0;
|
||||
source = packet->udp->source;
|
||||
dest = packet->udp->dest;
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- if(ndpi_struct->bt6_ht && packet->iphv6) {
|
||||
- f1 = hash_ip4p_find(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&packet->iphv6->ip6_src,source,
|
||||
- packet->current_time);
|
||||
- f2 = hash_ip4p_find(ndpi_struct->bt6_ht,(ndpi_ip_addr_t *)&packet->iphv6->ip6_dst,dest,
|
||||
- packet->current_time);
|
||||
-#ifdef __KERNEL__
|
||||
- if(f1) {
|
||||
- DIRC(ndpi_pusr,ndpi_pusf);
|
||||
- }
|
||||
- if(f2) {
|
||||
- DIRC(ndpi_pudr,ndpi_pudf);
|
||||
- }
|
||||
-#endif
|
||||
- return f1 != NULL || f2 != NULL;
|
||||
- }
|
||||
-#endif
|
||||
if(ndpi_struct->bt_ht && packet->iph) {
|
||||
f1 = hash_ip4p_find(ndpi_struct->bt_ht,(ndpi_ip_addr_t *)&packet->iph->saddr,source,
|
||||
packet->current_time);
|
||||
@@ -1653,11 +1523,6 @@
|
||||
u_int32_t size,u_int32_t size6,u_int32_t tmo,int logsize) {
|
||||
|
||||
ndpi_struct->bt_ht = hash_ip4p_init(size);
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
- ndpi_struct->bt6_ht = hash_ip4p_init(size6);
|
||||
- if(ndpi_struct->bt6_ht)
|
||||
- ndpi_struct->bt6_ht->ipv6=1;
|
||||
-#endif
|
||||
ndpi_bt_node_expire = tmo;
|
||||
#ifdef BT_ANNOUNCE
|
||||
if(logsize > 0) {
|
||||
@@ -1679,12 +1544,6 @@
|
||||
hash_ip4p_del(ndpi_struct->bt_ht);
|
||||
ndpi_struct->bt_ht = NULL;
|
||||
}
|
||||
-#ifdef NDPI_DETECTION_SUPPORT_IPV6
|
||||
-if(ndpi_struct->bt6_ht) {
|
||||
- hash_ip4p_del(ndpi_struct->bt6_ht);
|
||||
- ndpi_struct->bt6_ht = NULL;
|
||||
-}
|
||||
-#endif
|
||||
}
|
||||
|
||||
void init_bittorrent_dissector(struct ndpi_detection_module_struct *ndpi_struct,
|
37
r8125/Makefile
Executable file
37
r8125/Makefile
Executable file
|
@ -0,0 +1,37 @@
|
|||
# Attribution: https://gist.github.com/lenew/9b41ba901c3393047ede0766760f9d55
|
||||
|
||||
#Put this source to 'package/lean/r8125' folder of OpenWRT/LEDE SDK
|
||||
#Build(make menuconfig, make defconfig, make)
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=r8125
|
||||
PKG_VERSION:=9.010.01-1
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/awesometic/realtek-r8125-dkms/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=81fb9a100e6cefb421557639b476fd03af61a99c55bc8fb03c6e396532bd0944
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/realtek-$(PKG_NAME)-dkms-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/r8125
|
||||
TITLE:=Driver for Realtek r8125 chipsets
|
||||
SUBMENU:=Network Devices
|
||||
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
||||
FILES:= $(PKG_BUILD_DIR)/src/r8125.ko
|
||||
AUTOLOAD:=$(call AutoProbe,r8125)
|
||||
endef
|
||||
|
||||
define Package/r8125/description
|
||||
This package contains a driver for Realtek r8125 chipsets.
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(KERNEL_MAKE) M=$(PKG_BUILD_DIR)/src modules
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,r8125))
|
14
r8125/patches/021-6.1-suppot.patch
Executable file
14
r8125/patches/021-6.1-suppot.patch
Executable file
|
@ -0,0 +1,14 @@
|
|||
--- a/src/r8125.h
|
||||
+++ b/src/r8125.h
|
||||
@@ -633,7 +633,11 @@
|
||||
typedef struct napi_struct *napi_ptr;
|
||||
typedef int napi_budget;
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
+#define RTL_NAPI_CONFIG(ndev, priv, function, weight) netif_napi_add_weight(ndev, &priv->napi, function, weight)
|
||||
+#else
|
||||
#define RTL_NAPI_CONFIG(ndev, priv, function, weight) netif_napi_add(ndev, &priv->napi, function, weight)
|
||||
+#endif
|
||||
#define RTL_NAPI_QUOTA(budget, ndev) min(budget, budget)
|
||||
#define RTL_GET_PRIV(stuct_ptr, priv_struct) container_of(stuct_ptr, priv_struct, stuct_ptr)
|
||||
#define RTL_GET_NETDEV(priv_ptr) struct net_device *dev = priv_ptr->dev;
|
55
r8152/Makefile
Executable file
55
r8152/Makefile
Executable file
|
@ -0,0 +1,55 @@
|
|||
#
|
||||
# Download realtek r8152 linux driver from official site:
|
||||
# [https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-usb-3-0-software]
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=r8152
|
||||
PKG_VERSION:=2.16.3.20220914
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/wget/realtek-r8152-linux/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=61ed7af34c8882c6028ddd1a27bb78fb5bfba41211f84dd7a06e4dc84dbe9a9a
|
||||
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/realtek-$(PKG_NAME)-linux-$(PKG_VERSION)
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/usb-net-rtl8152-vendor
|
||||
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
||||
TITLE:=Kernel module for USB-to-Ethernet Realtek convertors
|
||||
SUBMENU:=USB Support
|
||||
DEPENDS:=+kmod-usb-net
|
||||
FILES:=$(PKG_BUILD_DIR)/r8152.ko
|
||||
AUTOLOAD:=$(call AutoProbe,r8152)
|
||||
CONFLICTS:=kmod-usb-net-rtl8152
|
||||
endef
|
||||
|
||||
define KernelPackage/usb-net-rtl8152-vendor/description
|
||||
Kernel module for Realtek RTL8152/RTL8153 Based USB Ethernet Adapters
|
||||
endef
|
||||
|
||||
R8152_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
|
||||
+$(MAKE) $(PKG_JOBS) $(R8152_MAKEOPTS) modules
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,usb-net-rtl8152-vendor))
|
19
r8152/patches/010-5.19-support.patch
Executable file
19
r8152/patches/010-5.19-support.patch
Executable file
|
@ -0,0 +1,19 @@
|
|||
--- a/r8152.c
|
||||
+++ b/r8152.c
|
||||
@@ -1026,6 +1026,16 @@
|
||||
#define RTL_ADVERTISED_1000_FULL BIT(5)
|
||||
#define RTL_ADVERTISED_2500_FULL BIT(6)
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)
|
||||
+static inline void netif_set_gso_max_size(struct net_device *dev,
|
||||
+ unsigned int size)
|
||||
+{
|
||||
+ /* dev->gso_max_size is read locklessly from sk_setup_caps() */
|
||||
+ WRITE_ONCE(dev->gso_max_size, size);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
|
||||
* The RTL chips use a 64 element hash table based on the Ethernet CRC.
|
||||
*/
|
38
r8152/patches/020-6.1-support.patch
Executable file
38
r8152/patches/020-6.1-support.patch
Executable file
|
@ -0,0 +1,38 @@
|
|||
--- a/compatibility.h
|
||||
+++ b/compatibility.h
|
||||
@@ -237,9 +237,15 @@
|
||||
#define napi_disable(napi_ptr) netif_poll_disable(container_of(napi_ptr, struct r8152, napi)->netdev)
|
||||
#define napi_schedule(napi_ptr) netif_rx_schedule(container_of(napi_ptr, struct r8152, napi)->netdev)
|
||||
#define napi_complete(napi_ptr) netif_rx_complete(container_of(napi_ptr, struct r8152, napi)->netdev)
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
+ #define netif_napi_add_weight(ndev, napi_ptr, function, weight_t) \
|
||||
+ ndev->poll = function; \
|
||||
+ ndev->weight = weight_t;
|
||||
+#else
|
||||
#define netif_napi_add(ndev, napi_ptr, function, weight_t) \
|
||||
ndev->poll = function; \
|
||||
ndev->weight = weight_t;
|
||||
+#endif
|
||||
typedef unsigned long uintptr_t;
|
||||
#define DMA_BIT_MASK(value) \
|
||||
(value < 64 ? ((1ULL << value) - 1) : 0xFFFFFFFFFFFFFFFFULL)
|
||||
--- a/r8152.c
|
||||
+++ b/r8152.c
|
||||
@@ -20718,10 +20718,17 @@
|
||||
|
||||
usb_set_intfdata(intf, tp);
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
+ if (tp->support_2500full)
|
||||
+ netif_napi_add_weight(netdev, &tp->napi, r8152_poll, 256);
|
||||
+ else
|
||||
+ netif_napi_add_weight(netdev, &tp->napi, r8152_poll, 64);
|
||||
+#else
|
||||
if (tp->support_2500full)
|
||||
netif_napi_add(netdev, &tp->napi, r8152_poll, 256);
|
||||
else
|
||||
netif_napi_add(netdev, &tp->napi, r8152_poll, 64);
|
||||
+#endif
|
||||
|
||||
ret = register_netdev(netdev);
|
||||
if (ret != 0) {
|
39
r8168/Makefile
Executable file
39
r8168/Makefile
Executable file
|
@ -0,0 +1,39 @@
|
|||
#
|
||||
# Download realtek r8168 linux driver from official site:
|
||||
# [https://www.realtek.com/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software]
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=r8168
|
||||
PKG_VERSION:=8.051.02
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/BROBIRD/openwrt-r8168.git
|
||||
PKG_SOURCE_VERSION:=4f6cfe1ca12fb772deed57f1d2d1062af041ad07
|
||||
PKG_MIRROR_HASH:=6b149f5eb3b9e1dc50867a694984d253aa58d97dd5fbab30eb405d2d7b2be587
|
||||
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/r8168
|
||||
TITLE:=Driver for Realtek r8168 chipsets
|
||||
SUBMENU:=Network Devices
|
||||
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
||||
FILES:= $(PKG_BUILD_DIR)/src/r8168.ko
|
||||
AUTOLOAD:=$(call AutoProbe,r8168)
|
||||
CONFLICTS:=kmod-r8169
|
||||
endef
|
||||
|
||||
define Package/r8168/description
|
||||
This package contains a driver for Realtek r8168 chipsets.
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(KERNEL_MAKE) M=$(PKG_BUILD_DIR)/src modules
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,r8168))
|
42
r8168/patches/001-r8168-add-LED-configuration-from-OF.patch
Executable file
42
r8168/patches/001-r8168-add-LED-configuration-from-OF.patch
Executable file
|
@ -0,0 +1,42 @@
|
|||
--- a/src/r8168_n.c
|
||||
+++ b/src/r8168_n.c
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mii.h>
|
||||
+#include <linux/of.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/interrupt.h>
|
||||
@@ -23482,6 +23483,22 @@ rtl8168_set_bios_setting(struct net_devi
|
||||
}
|
||||
}
|
||||
|
||||
+static int rtl8168_led_configuration(struct rtl8168_private *tp)
|
||||
+{
|
||||
+ u32 led_data;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = of_property_read_u32(tp->pci_dev->dev.of_node,
|
||||
+ "realtek,led-data", &led_data);
|
||||
+
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ RTL_W16(tp, CustomLED, led_data);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
rtl8168_init_software_variable(struct net_device *dev)
|
||||
{
|
||||
@@ -24000,6 +24017,8 @@ rtl8168_init_software_variable(struct ne
|
||||
tp->NotWrMcuPatchCode = TRUE;
|
||||
}
|
||||
|
||||
+ rtl8168_led_configuration(tp);
|
||||
+
|
||||
tp->NicCustLedValue = RTL_R16(tp, CustomLED);
|
||||
|
||||
rtl8168_get_hw_wol(dev);
|
14
r8168/patches/030-6.1-support.patch
Executable file
14
r8168/patches/030-6.1-support.patch
Executable file
|
@ -0,0 +1,14 @@
|
|||
--- a/src/r8168.h
|
||||
--- b/src/r8168.h
|
||||
@@ -566,7 +566,11 @@
|
||||
typedef struct napi_struct *napi_ptr;
|
||||
typedef int napi_budget;
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
+#define RTL_NAPI_CONFIG(ndev, priv, function, weight) netif_napi_add_weight(ndev, &priv->napi, function, weight)
|
||||
+#else
|
||||
#define RTL_NAPI_CONFIG(ndev, priv, function, weight) netif_napi_add(ndev, &priv->napi, function, weight)
|
||||
+#endif
|
||||
#define RTL_NAPI_QUOTA(budget, ndev) min(budget, budget)
|
||||
#define RTL_GET_PRIV(stuct_ptr, priv_struct) container_of(stuct_ptr, priv_struct, stuct_ptr)
|
||||
#define RTL_GET_NETDEV(priv_ptr) struct net_device *dev = priv_ptr->dev;
|
|
@ -40,11 +40,11 @@ endef
|
|||
CONFIGURE_ARGS += --without-rpm \
|
||||
--without-nss --without-avahi --without-dyninst \
|
||||
--disable-server --disable-grapher --enable-prologues \
|
||||
--without-python2-probes --disable-translator \
|
||||
--without-python2-probes \
|
||||
--disable-libvirt --disable-sqlite --disable-monitor --without-python3-probes \
|
||||
ac_cv_prog_have_javac=no \
|
||||
ac_cv_prog_have_jar=no
|
||||
|
||||
# --disable-translator
|
||||
HOST_CONFIGURE_ARGS += --without-rpm \
|
||||
--without-nss --without-avahi --without-dyninst \
|
||||
--disable-server --disable-grapher --enable-prologues \
|
||||
|
|
11
systemtap/patches/replace-open64.patch
Normal file
11
systemtap/patches/replace-open64.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
--- a/setupdwfl.cxx 2023-07-26 20:22:35.427807372 +0200
|
||||
+++ b/setupdwfl.cxx 2023-07-26 20:22:43.855666830 +0200
|
||||
@@ -762,7 +762,7 @@
|
||||
clog << _("Attempting to extract kernel debuginfo build ID from /sys/kernel/notes") << endl;
|
||||
|
||||
const char *notesfile = "/sys/kernel/notes";
|
||||
- int fd = open64 (notesfile, O_RDONLY);
|
||||
+ int fd = open (notesfile, O_RDONLY);
|
||||
if (fd < 0)
|
||||
return "";
|
||||
|
|
@ -1944,6 +1944,16 @@ clear_transparent_proxy() {
|
|||
fi
|
||||
}
|
||||
|
||||
version_over_5_4() {
|
||||
MAJOR_VERSION=$(uname -r | awk -F '.' '{print $1}')
|
||||
MINOR_VERSION=$(uname -r | awk -F '.' '{print $2}')
|
||||
if [ $MAJOR_VERSION -ge 5 ] && [ $MINOR_VERSION -gt 13 ] || [ $MAJOR_VERSION -gt 5 ] ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
start_instance() {
|
||||
local section="$1"
|
||||
|
||||
|
@ -2054,10 +2064,14 @@ start_instance() {
|
|||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
PROG="$NAME.$section"
|
||||
|
||||
TRANSPARENT_PROXY_EXPECTED=1
|
||||
|
||||
procd_open_instance "$NAME.$section"
|
||||
if version_over_5_4; then
|
||||
PROG="mptcpize run ${PROG}"
|
||||
fi
|
||||
procd_open_instance "$PROG"
|
||||
procd_set_param command "$v2ray_file"
|
||||
procd_append_param command run
|
||||
procd_append_param command -config "$temp_config"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue