🛸 Sync 2026-07-04 19:06:12

This commit is contained in:
github-actions[bot] 2026-07-04 19:06:12 +08:00
parent 0ec008c9bf
commit 673a352ca1
20 changed files with 126 additions and 676 deletions

View File

@ -1,137 +0,0 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2023 ImmortalWrt.org
include $(TOPDIR)/rules.mk
PKG_NAME:=daed-next
PKG_VERSION:=2023-12-02-102cb56
CORE_VERSION:=core-$(shell date "+%Y-%m-%d")
PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=102cb562b6962b44c47f38092284d2ab2506a702
PKG_SOURCE_URL:=https://github.com/daeuniverse/daed-revived-next.git
PKG_MIRROR_HASH:=skip
PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/wing
PKG_BUILD_DEPENDS:=golang/host bpf-headers
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
PKG_BUILD_FLAGS:=no-mips16
GO_PKG:=github.com/daeuniverse/dae-wing
GO_PKG_LDFLAGS:= \
-X '$(GO_PKG)/db.AppDescription=$(PKG_NAME) is a integration solution of dae, API and UI.'
GO_PKG_LDFLAGS_X:= \
$(GO_PKG)/db.AppName=$(PKG_NAME) \
$(GO_PKG)/db.AppVersion=$(PKG_VERSION)-$(CORE_VERSION)
GO_PKG_GCFLAGS:=-l=4
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/bpf.mk
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
define Package/daed-next/Default
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
URL:=https://github.com/daeuniverse/daed-revived-next
endef
define Package/daed-next
$(call Package/daed-next/Default)
TITLE:=daed-next is a backend of dae
# You need enable KERNEL_DEBUG_INFO_BTF and KERNEL_BPF_EVENTS
DEPENDS:=$(GO_ARCH_DEPENDS) $(BPF_DEPENDS) \
+ca-bundle +kmod-sched-core +kmod-sched-bpf +kmod-xdp-sockets-diag +kmod-veth \
+node +v2ray-geoip +v2ray-geosite +zoneinfo-asia
endef
define Package/daed-next/description
daed-next is a backend of dae, provides a method to bundle arbitrary
frontend, dae and geodata into one binary.
endef
define Package/daed-next/conffiles
/etc/daed-next/wing.db
/etc/config/daed-next
endef
define Download/daed-next
URL:=https://github.com/QiuSimons/luci-app-daed-next/releases/download/daed-web-$(PKG_VERSION)/
URL_FILE:=daed-web-$(PKG_VERSION).squashfs
FILE:=daed-web-$(PKG_VERSION).squashfs
HASH:=skip
endef
define Build/Prepare
( \
$(TAR) --strip-components=1 -C $(PKG_BUILD_DIR)/../ -xzf $(DL_DIR)/$(PKG_NAME)-$(PKG_VERSION).tar.gz ; \
rm -rf $(PKG_BUILD_DIR) && git clone https://github.com/daeuniverse/dae-wing $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/wing ; \
rm -rf $(PKG_BUILD_DIR)/dae-core && git clone https://github.com/daeuniverse/dae $(PKG_BUILD_DIR)/dae-core ; \
rm -rf $(PKG_BUILD_DIR)/dae-core/control/kern/headers && git clone https://github.com/daeuniverse/dae_bpf_headers $(PKG_BUILD_DIR)/dae-core/control/kern/headers ; \
pushd $(PKG_BUILD_DIR)/dae-core ; \
sed -i -e 's!default:"30s"!default:"600s"!g' -e 's!default:"HEAD"!default:"CONNECT"!g' -e 's!default:"dns.google.com:53,8.8.8.8,2001:4860:4860::8888"!default:"one.one.one.one:53,1.0.0.1,2606:4700:4700::1111"!g' -e 's!default:"http://cp.cloudflare.com,1.1.1.1,2606:4700:4700::1111"!default:"http://cp.cloudflare.com,1.0.0.1,2606:4700:4700::1111"!g' config/config.go ; \
go get -u=patch ; \
go mod tidy ; \
popd ; \
pushd $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/wing ; \
wget -qO - https://github.com/daeuniverse/dae-wing/commit/ca0296173d36746335efed1923ff08c1300f7a61.patch | patch -p1 ; \
go get -u=patch ; \
go mod tidy ; \
popd ; \
)
endef
DAE_CFLAGS:= \
-O2 -Wall -Werror \
-DMAX_MATCH_SET_LEN=64 \
-I$(BPF_HEADERS_DIR)/tools/lib \
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic
ifneq ($(CONFIG_USE_MUSL),)
TARGET_CFLAGS += -D_LARGEFILE64_SOURCE
endif
define Build/Compile
( \
pushd $(PKG_BUILD_DIR) ; \
$(MAKE) deps ; \
$(GO_GENERAL_BUILD_CONFIG_VARS) \
$(GO_PKG_BUILD_CONFIG_VARS) \
$(GO_PKG_BUILD_VARS) \
go generate ./... ; \
cd dae-core ; \
$(GO_GENERAL_BUILD_CONFIG_VARS) \
$(GO_PKG_BUILD_CONFIG_VARS) \
$(GO_PKG_BUILD_VARS) \
BPF_CLANG="$(CLANG)" \
BPF_STRIP_FLAG="-strip=$(LLVM_STRIP)" \
BPF_CFLAGS="$(DAE_CFLAGS)" \
BPF_TARGET="bpfel,bpfeb" \
go generate control/control.go ; \
popd ; \
$(call GoPackage/Build/Compile) ; \
)
endef
define Package/daed-next/install
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dae-wing $(1)/usr/bin/dae-wing
$(INSTALL_DIR) $(1)/usr/share/daed-next
$(INSTALL_DATA) $(DL_DIR)/daed-web-$(PKG_VERSION).squashfs $(1)/usr/share/daed-next/daed-web.squashfs
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) $(CURDIR)/files/daed-next.config $(1)/etc/config/daed-next
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(CURDIR)/files/daed-next.init $(1)/etc/init.d/daed-next
endef
$(eval $(call Download,daed-next))
$(eval $(call GoBinPackage,daed-next))
$(eval $(call BuildPackage,daed-next))

View File

@ -1,8 +0,0 @@
config daed-next 'config'
option enabled '0'
option listen_port '3000'
option log_enabled '0'
option log_maxbackups '1'
option log_maxsize '1'

View File

@ -1,59 +0,0 @@
#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
NODE_BIN=/usr/bin/node
WING_BIN=/usr/bin/dae-wing
WEB_SQUASHFS=/usr/share/daed-next/daed-web.squashfs
GEODATA=/usr/share/v2ray
get_config() {
config_get_bool enabled $1 enabled "0"
config_get listen_port $1 listen_port "3000"
config_get log_enabled $1 log_enabled "0"
config_get log_maxbackups $1 log_maxbackups "1"
config_get log_maxsize $1 log_maxsize "1"
}
start_service() {
config_load "daed-next"
config_foreach get_config "daed-next"
[ "$enabled" -eq "1" ] || return 1
[ "$log_enabled" -eq "1" ] && log_path="/var/log/daed-next/daed-next.log" || log_path="/dev/null"
mkdir -p /var/log/daed-next
true > /var/log/daed-next/daed-next.log
# dae-wing
procd_open_instance dae-wing
procd_set_param env DAE_LOCATION_ASSET=$GEODATA
procd_set_param command $WING_BIN run
procd_append_param command --config "/etc/daed-next/"
procd_append_param command --logfile "$log_path"
procd_append_param command --logfile-maxbackups "$log_maxbackups"
procd_append_param command --logfile-maxsize "$log_maxsize"
procd_set_param limits core="unlimited"
procd_set_param limits nofile="1000000 1000000"
procd_set_param stdout 0
procd_set_param stderr 0
procd_set_param respawn 300 5 10
procd_close_instance dae-wing
}
service_triggers() {
procd_add_reload_trigger "daed-next"
}
stop_service() {
sleep 2
mount_points=$(mount | grep '/tmp/daed-next' | awk '{print $3}')
for mp in $mount_points; do
umount -l "$mp" || { echo "Failed to force unmount $mp"; }
done
}
reload_service() {
stop
sleep 2
start
}

View File

@ -1,18 +0,0 @@
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-daed-next
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
LUCI_TITLE:=LuCI support for daed-next
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+daed-next +bash +luci-compat
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -1,36 +0,0 @@
local sys = require "luci.sys"
local http = require "luci.http"
module("luci.controller.daed-next", package.seeall)
function index()
if not nixio.fs.access("/etc/config/daed-next") then
return
end
local page = entry({"admin", "services", "daed-next"}, alias("admin", "services", "daed-next", "basic"), _("DAED Next"), -1)
page.dependent = true
page.acl_depends = { "luci-app-daed-next" }
entry({"admin", "services", "daed-next", "basic"}, cbi("daed-next/basic"), _("Basic Setting"), 1).leaf = true
entry({"admin", "services", "daed-next", "dashboard"}, template("daed-next/dashboard"), _("Dashboard"), 2).leaf = true
entry({"admin", "services", "daed-next", "log"}, cbi("daed-next/log"), _("Logs"), 3).leaf = true
entry({"admin", "services", "daed-next", "status"}, call("act_status")).leaf = true
entry({"admin", "services", "daed-next", "get_log"}, call("get_log")).leaf = true
entry({"admin", "services", "daed-next", "clear_log"}, call("clear_log")).leaf = true
end
function act_status()
local e = {}
e.running = sys.call("pgrep -x /usr/bin/dae-wing >/dev/null") == 0
http.prepare_content("application/json")
http.write_json(e)
end
function get_log()
http.write(sys.exec("cat /var/log/daed-next/daed-next.log"))
end
function clear_log()
sys.call("true > /var/log/daed-next/daed-next.log")
end

View File

@ -1,76 +0,0 @@
local m, s
m = Map("daed-next", translate("DAE Dashboard"))
m.description = translate("A Linux high-performance transparent proxy solution based on eBPF")
m:section(SimpleSection).template = "daed-next/daed-next_status"
s = m:section(TypedSection, "daed-next")
s.addremove = false
s.anonymous = true
if nixio.fs.stat("/sys/fs/bpf","type") ~= "dir" then
s.rawhtml = true
s.template = "daed-next/daed-next_error"
end
o = s:option(Flag, "enabled", translate("Enabled"))
o.rmempty = false
o = s:option(Button, "Dashboard Toggle", translate("Dashboard Toggle"))
o.inputtitle = translate("Toggle")
o.inputstyle = "reload"
o.description = translate("Dashboard is a frontend management panel, meant for configuration use only.")
o.write = function()
luci.sys.exec("/etc/daed-next/dashboard.sh &> /dev/null &")
end
enable = s:option(Flag, "subscribe_auto_update", translate("Enable Auto Subscribe Update"))
enable.rmempty = false
o = s:option(Value, "daed_username", translate("Username"))
o.default = Username
o.password = true
o:depends('subscribe_auto_update', '1')
o = s:option(Value, "daed_password", translate("Password"))
o.default = Password
o.password = true
o:depends('subscribe_auto_update', '1')
o = s:option(ListValue, "subscribe_update_week_time", translate("Update Cycle"))
o:value("*", translate("Every Day"))
o:value("1", translate("Every Monday"))
o:value("2", translate("Every Tuesday"))
o:value("3", translate("Every Wednesday"))
o:value("4", translate("Every Thursday"))
o:value("5", translate("Every Friday"))
o:value("6", translate("Every Saturday"))
o:value("7", translate("Every Sunday"))
o.default = "*"
o:depends('subscribe_auto_update', '1')
update_time = s:option(ListValue, "subscribe_update_day_time", translate("Update Time (Every Day)"))
for t = 0, 23 do
update_time:value(t, t..":00")
end
update_time.default = 0
update_time:depends('subscribe_auto_update', '1')
o = s:option(Value, "listen_port", translate("Web Listen port"))
o.datatype = "and(port,min(1))"
o.default = 3000
o = s:option(Flag, "log_enabled", translate("Enable Logs"))
o.default = 0
o.rmempty = false
o = s:option(Value, "log_maxbackups", translate("Logfile retention count"))
o.default = 1
o:depends("log_enabled", "1")
o = s:option(Value, "log_maxsize", translate("Logfile Max Size (MB)"))
o.default = 1
o:depends("log_enabled", "1")
return m

View File

@ -1,5 +0,0 @@
m = Map("daed-next")
m:append(Template("daed-next/daed-next_log"))
return m

File diff suppressed because one or more lines are too long

View File

@ -1,33 +0,0 @@
<script type="text/javascript">
//<![CDATA[
function clear_log(btn) {
XHR.get('<%=url([[admin]], [[services]], [[daed-next]], [[clear_log]])%>', null,
function(x, data) {
if(x && x.status == 200) {
var log_textarea = document.getElementById('log_textarea');
log_textarea.innerHTML = "";
log_textarea.scrollTop = log_textarea.scrollHeight;
}
location.reload();
}
);
}
var scrolled = false;
XHR.poll(2, '<%=url([[admin]], [[services]], [[daed-next]], [[get_log]])%>', null,
function(x, data) {
if(x && x.status == 200) {
var log_textarea = document.getElementById('log_textarea');
log_textarea.innerHTML = x.responseText;
if (!scrolled) {
log_textarea.scrollTop = log_textarea.scrollHeight;
scrolled = true;
}
}
}
);
//]]>
</script>
<fieldset class="cbi-section" id="_log_fieldset">
<input class="cbi-button cbi-input-remove" type="button" onclick="clear_log()" value="<%:Clear logs%>" style="margin-left: 10px; margin-top: 10px;">
<textarea id="log_textarea" class="cbi-input-textarea" style="width: calc(100% - 20px); height: 645px; margin: 10px;" data-update="change" rows="5" wrap="off" readonly="readonly"></textarea>
</fieldset>

View File

@ -1,46 +0,0 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url("admin/services/daed-next/status")%>', null,
function(x, data)
{
var tb = document.getElementById('daed-next_status');
if (data && tb)
{
if (data.running)
{
tb.innerHTML = '<em style=\"color:green\"><b><%:dae-wing%> <%:RUNNING%></b></em>';
}
else
{
tb.innerHTML = '<em style=\"color:red\"><b><%:dae-wing%> <%:NOT RUNNING%></b></em>';
}
}
}
);
//]]></script>
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url("admin/services/daed-next/dashboardstatus")%>', null,
function(x, data) {
console.log('Received data:', data);
var dashboardstatus = document.getElementById('daed-next_dashboardstatus');
var dashboardPidExists = <%=luci.sys.exec("[ -e '/tmp/log/daed-next/dashboard.pid' ] && echo '1' || echo '0'")%>;
if (dashboardPidExists) {
dashboardstatus.innerHTML = '<em style=\"color:green\"><b><%:Dashboard%> <%:RUNNING%></b></em>';
} else {
dashboardstatus.innerHTML = '<em style=\"color:red\"><b><%:Dashboard%> <%:NOT RUNNING%></b></em>';
}
}
);
//]]></script>
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
<fieldset class="cbi-section">
<p id="daed-next_status">
<em><b><%:Collecting data...%></b></em>
</p>
<p id="daed-next_dashboardstatus">
<em><b><%:Collecting data...%></b></em>
</p>
</fieldset>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
zh_Hans

View File

@ -1,86 +0,0 @@
msgid "DAED Next"
msgstr ""
msgid "DAE Dashboard"
msgstr "DAE 仪表板"
msgid "A Linux high-performance transparent proxy solution based on eBPF"
msgstr "一个基于 eBPF 的 Linux 高性能透明代理解决方案"
msgid "Enabled"
msgstr "启用"
msgid "Web Listen port"
msgstr "Web 监听端口"
msgid "Enable Logs"
msgstr "启用日志"
msgid "Logfile retention count"
msgstr "日志文件保留数量"
msgid "Logfile Max Size (MB)"
msgstr "日志文件大小MB"
msgid "Logs"
msgstr "日志"
msgid "Clear logs"
msgstr "清空日志"
msgid "Basic Setting"
msgstr "基本设置"
msgid "RUNNING"
msgstr "运行中"
msgid "NOT RUNNING"
msgstr "未运行"
msgid "Collecting data..."
msgstr "收集数据..."
msgid "Open Web Interface"
msgstr "打开 Web 界面"
msgid "The kernel does not support eBPF"
msgstr "内核不支持 eBPF"
msgid "Dashboard"
msgstr "仪表板"
msgid "DAED Next is not running"
msgstr "DAED Next 未运行"
msgid "Please start the DAED Next service first and try again"
msgstr "请先启动 DAED Next 服务后重试"
msgid "dae-wing or dashboard is not running"
msgstr "DAE-WING 或 仪表板 未运行"
msgid "Please start the dae-wing service and the dashboard service first and try again"
msgstr "请先启动 DAE-WING 和 仪表板 服务后重试"
msgid "Enable Auto Subscribe Update"
msgstr "启用订阅自动更新"
msgid "Update Cycle"
msgstr "更新周期"
msgid "Update Time (Every Day)"
msgstr "更新时间(每天)"
msgid "Username"
msgstr "用户名"
msgid "Password"
msgstr "密码"
msgid "Dashboard Toggle"
msgstr "仪表板开关"
msgid "Toggle"
msgstr "开/关"
msgid "Dashboard is a frontend management panel, meant for configuration use only."
msgstr "仪表板是一个前端管理面板,仅应在配置过程中启用。(登录后若浏览器未自动跳转,请手动刷新页面)"

View File

@ -1,36 +0,0 @@
#!/bin/sh
USERNAME=$(uci -q get daed-next.config.daed_username)
PASSWORD=$(uci -q get daed-next.config.daed_password)
PORT=2023
GRAPHQL_URL="http://127.0.0.1:"$PORT"/graphql"
CRON_FILE="/etc/crontabs/root"
RANDOM_SEED=$RANDOM
RANDOM_NUM=$((RANDOM_SEED % 10 + 1))
login() {
LOGIN=$(curl -s -X POST -H "Content-Type: application/json" -d '{"query":"query Token($username: String!, $password: String!) {\n token(username: $username, password: $password)\n}","variables":{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}}' $GRAPHQL_URL)
JSON=${LOGIN#\"}
JSON=${LOGIN%\"}
TOKEN=$(echo $JSON | sed -n 's/.*"token":"\([^"]*\)".*/\1/p')
}
update_subscription() {
SUBSCRIPTION_ID_LIST=$(curl -s -X POST -H "Authorization: $TOKEN" -d '{"query": "query Subscriptions {\n subscriptions {\nid\ntag\nstatus\nlink\ninfo\nupdatedAt\nnodes {\nedges {\nid\nname\nprotocol\nlink\n}\n}\n}\n}", "operationName": "Subscriptions"}' $GRAPHQL_URL | grep -o '"id":"[^"]*","tag"' | grep -o 'id":"[^"]*' | grep -o '[^"]*$')
echo "$SUBSCRIPTION_ID_LIST" | while read -r id; do
curl -X POST -H "Authorization: $TOKEN" -d '{"query":"mutation UpdateSubscription($id: ID!) {\n updateSubscription(id: $id) {\n id\n }\n}","variables":{"id":"'"$id"'"},"operationName":"UpdateSubscription"}' $GRAPHQL_URL
done
}
reload() {
curl -X POST -H "Authorization: $TOKEN" -d '{"query":"mutation Run($dry: Boolean!) {\n run(dry: $dry)\n}","variables":{"dry":false},"operationName":"Run"}' $GRAPHQL_URL
}
resetcron() {
touch $CRON_FILE
sed -i '/daed-next_sub.sh/d' $CRON_FILE 2>/dev/null
[ "$(uci -q get daed-next.config.subscribe_auto_update)" -eq 1 ] && echo "${RANDOM_NUM} $(uci -q get daed-next.config.subscribe_update_day_time) * * $(uci -q get daed-next.config.subscribe_update_week_time) /etc/daed-next/daed-next_sub.sh >/dev/null 2>&1" >>$CRON_FILE
crontab $CRON_FILE
}
login && update_subscription && reload && resetcron

View File

@ -1,37 +0,0 @@
#!/bin/sh
NODE_BIN=/usr/bin/node
WEB_SQUASHFS=/usr/share/daed-next/daed-web.squashfs
PID_FILE=/tmp/log/daed-next/dashboard.pid
DAED_NEXT_DIR=/var/daed-next
start_server() {
listen_port=$(uci -q get daed-next.config.listen_port)
if [ ! -d "$DAED_NEXT_DIR" ]; then
mkdir -p "$DAED_NEXT_DIR"
fi
mount -t squashfs "$WEB_SQUASHFS" "$DAED_NEXT_DIR" || { echo "Mount failed"; }
ARGS="PORT=$listen_port HOSTNAME=0.0.0.0"
/bin/sh -c "$ARGS $NODE_BIN $DAED_NEXT_DIR/server.js" &
echo $! > "$PID_FILE"
}
stop_server() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
kill "$PID" || { echo "Failed to kill process $PID"; }
rm -f "$PID_FILE"
mount_points=$(mount | grep '/tmp/daed-next' | awk '{print $3}')
for mp in $mount_points; do
umount -l "$mp" || { echo "Failed to force unmount $mp"; }
done
fi
}
if [ -e "$PID_FILE" ]; then
stop_server
else
start_server
fi

View File

@ -1,48 +0,0 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2023 Tianling Shen <cnsztl@immortalwrt.org>
USE_PROCD=0
START=99
CONF="daed-next"
PROG="/usr/bin/dae-wing"
LOG="/var/log/daed-next/daed-next.log"
CRON_FILE="/etc/crontabs/root"
RANDOM_SEED=$RANDOM
RANDOM_NUM=$((RANDOM_SEED % 10 + 1))
setcron() {
touch $CRON_FILE
sed -i '/daed-next_sub.sh/d' $CRON_FILE 2>/dev/null
[ "$(uci -q get daed-next.config.subscribe_auto_update)" -eq 1 ] && echo "${RANDOM_NUM} $(uci -q get daed-next.config.subscribe_update_day_time) * * $(uci -q get daed-next.config.subscribe_update_week_time) /etc/daed-next/daed-next_sub.sh >/dev/null 2>&1" >>$CRON_FILE
crontab $CRON_FILE
}
delcron() {
sed -i '/daed-next_sub.sh/d' $CRON_FILE 2>/dev/null
crontab $CRON_FILE
}
start_service() {
config_load "$CONF"
local enabled
config_get_bool enabled "config" "enabled" "0"
if [ "$enabled" -eq 0 ]; then
delcron
return 1
fi
setcron
}
stop_service() {
delcron
}
service_triggers() {
procd_add_reload_trigger "$CONF"
}
reload_service() {
restart
}

View File

@ -1,5 +0,0 @@
#!/bin/sh
rm -rf /tmp/luci-*
exit 0

View File

@ -1,11 +0,0 @@
{
"luci-app-daed-next": {
"description": "Grant UCI access for luci-app-daed-next",
"read": {
"uci": [ "daed-next" ]
},
"write": {
"uci": [ "daed-next" ]
}
}
}

2
quectel_MHI/Makefile Normal file → Executable file
View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=pcie_mhi
PKG_VERSION:=1.3.8
PKG_RELEASE:=31
PKG_RELEASE:=32
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

125
vmlinux-btf/Makefile Normal file
View File

@ -0,0 +1,125 @@
# SPDX-License-Identifier: GPL-3.0-only
#
# Detached kernel BTF for CO-RE eBPF (dae/daed) on firmware whose kernel was
# built without CONFIG_DEBUG_INFO_BTF. Builds a shadow kernel from the same
# OpenWrt source + .config with BTF enabled, then pahole-encodes a detached
# vmlinux.btf. cilium/ebpf finds it at /usr/lib/debug/boot/vmlinux-<release>.
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=vmlinux-btf
PKG_VERSION:=$(LINUX_VERSION)
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
PKG_BUILD_PARALLEL:=1
define Package/vmlinux-btf
SECTION:=kernel
CATEGORY:=Kernel
TITLE:=Kernel vmlinux.btf for CO-RE compatibility
endef
define Package/vmlinux-btf/description
Supplies detached kernel BTF so CO-RE eBPF programs (dae/daed) load on
kernels built without CONFIG_DEBUG_INFO_BTF. Builds a shadow kernel from the
OpenWrt kernel source with BTF enabled and encodes a detached vmlinux.btf.
endef
define Package/vmlinux-btf/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
ln -sf /usr/lib/debug/boot/vmlinux /usr/lib/debug/boot/vmlinux-$$(uname -r)
fi
endef
define Package/vmlinux-btf/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
rm -f /usr/lib/debug/boot/vmlinux-$$(uname -r)
fi
endef
PAHOLE_JOBS := $(if $(filter -j%,$(PKG_JOBS)),$(patsubst -j%,%,$(filter -j%,$(PKG_JOBS))),1)
# The SDK ships an extracted kernel but no dl/ tarball, so fetch vanilla source.
KERNEL_MAJOR:=$(firstword $(subst ., ,$(LINUX_VERSION)))
LINUX_TARBALL_URL:=https://cdn.kernel.org/pub/linux/kernel/v$(KERNEL_MAJOR).x/$(LINUX_SOURCE)
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR) $(DL_DIR)
[ -f "$(DL_DIR)/$(LINUX_SOURCE)" ] || \
wget -nv -O "$(DL_DIR)/$(LINUX_SOURCE)" "$(LINUX_TARBALL_URL)"
$(TAR) -C $(PKG_BUILD_DIR) -xf $(DL_DIR)/$(LINUX_SOURCE)
mv $(PKG_BUILD_DIR)/linux-$(LINUX_VERSION) $(PKG_BUILD_DIR)/shadow-kernel
cp $(LINUX_DIR)/.config $(PKG_BUILD_DIR)/shadow-kernel/.config
endef
define Build/Compile
$(PKG_BUILD_DIR)/shadow-kernel/scripts/config \
--file $(PKG_BUILD_DIR)/shadow-kernel/.config \
--disable WERROR \
--enable CGROUPS \
--enable CGROUP_BPF \
--enable SOCK_CGROUP_DATA \
--enable KALLSYMS \
--enable PERF_EVENTS \
--enable TRACEPOINTS \
--enable KPROBES \
--enable UPROBES \
--enable BPF \
--enable BPF_SYSCALL \
--enable BPF_JIT \
--enable BPF_JIT_DEFAULT_ON \
--enable INET \
--enable NET_INGRESS \
--enable NET_EGRESS \
--enable BPF_STREAM_PARSER \
--enable XDP_SOCKETS \
--enable NET_SCHED \
--enable NET_SCH_INGRESS \
--enable NET_CLS \
--enable NET_CLS_ACT \
--enable KPROBE_EVENTS \
--enable UPROBE_EVENTS \
--enable BPF_EVENTS \
--enable DEBUG_KERNEL \
--enable DEBUG_INFO \
--disable DEBUG_INFO_NONE \
--enable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT \
--disable DEBUG_INFO_REDUCED \
--disable DEBUG_INFO_SPLIT \
--enable DEBUG_INFO_BTF \
--set-str EXTRA_FIRMWARE "" \
--set-str INITRAMFS_SOURCE ""
$(MAKE) -C $(PKG_BUILD_DIR)/shadow-kernel \
$(KERNEL_MAKE_FLAGS) \
KBUILD_HOSTLDFLAGS="$(KBUILD_HOSTLDFLAGS) -lz" \
olddefconfig
$(MAKE) -C $(PKG_BUILD_DIR)/shadow-kernel \
$(KERNEL_MAKE_FLAGS) \
$(PKG_JOBS) \
KBUILD_HOSTLDFLAGS="-L$(STAGING_DIR_HOST)/lib -lz" \
vmlinux
pahole \
--jobs=$(PAHOLE_JOBS) \
--btf_encode_detached=$(PKG_BUILD_DIR)/vmlinux-btf \
$(PKG_BUILD_DIR)/shadow-kernel/vmlinux
endef
define Build/Clean
rm -rf $(PKG_BUILD_DIR)
endef
define Package/vmlinux-btf/install
$(INSTALL_DIR) $(1)/usr/lib/debug/boot
$(INSTALL_DATA) $(PKG_BUILD_DIR)/vmlinux-btf $(1)/usr/lib/debug/boot/vmlinux
$(LN) vmlinux $(1)/usr/lib/debug/boot/vmlinux-$(LINUX_VERSION)
endef
$(eval $(call BuildPackage,vmlinux-btf))