1
0
Fork 0
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:
suyuan 2023-07-28 14:43:53 +08:00
commit bb7d601af6
37 changed files with 3268 additions and 18 deletions

View file

@ -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"

View 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

View 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

View 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

View 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

View 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>

View 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
View file

@ -0,0 +1 @@
zh-cn

View 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
}

View 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
}

View 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

View 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

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View 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

View 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');
}
}
});

View 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>

View 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>

View file

@ -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"

View file

@ -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")

View file

@ -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" ] || {

View 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

View 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
View 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))

View 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
View 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))

View 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.
*/

View 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
View 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))

View 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);

View 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;

View file

@ -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 \

View 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 "";

View file

@ -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"