mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-29 23:45:13 +08:00
🎄 Sync 2026-04-29 20:35:25
This commit is contained in:
1 parent
f595d41c87
commit
d3860fd411
28 files changed
+408
-46
No files matched your search
@@ -5,8 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=CloudflareSpeedTest
|
||||
PKG_VERSION:=2.3.4
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=2.3.5
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/XIU2/CloudflareSpeedTest/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ddns-go
|
||||
PKG_VERSION:=6.16.12
|
||||
PKG_RELEASE:=10
|
||||
PKG_VERSION:=6.16.13
|
||||
PKG_RELEASE:=11
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
-include $(dir $(lastword $(MAKEFILE_LIST)))../version.mk
|
||||
|
||||
PKG_NAME:=easytier-noweb
|
||||
PKG_VERSION:=$(or $(EASYTIER_VERSION),2.6.2)
|
||||
PKG_RELEASE:=1
|
||||
|
||||
ifeq ($(ARCH),mipsel)
|
||||
APP_ARCH:=mipsel
|
||||
endif
|
||||
ifeq ($(ARCH),mips)
|
||||
APP_ARCH:=mips
|
||||
endif
|
||||
ifeq ($(ARCH),arm)
|
||||
APP_ARCH:=arm
|
||||
endif
|
||||
ifeq ($(BOARD),kirkwood)
|
||||
APP_ARCH:=arm
|
||||
endif
|
||||
ifeq ($(ARCH),armv7)
|
||||
APP_ARCH:=armv7
|
||||
endif
|
||||
ifeq ($(ARCH),aarch64)
|
||||
APP_ARCH:=aarch64
|
||||
endif
|
||||
ifeq ($(ARCH),arm64)
|
||||
APP_ARCH:=aarch64
|
||||
endif
|
||||
ifeq ($(ARCH),armv8)
|
||||
APP_ARCH:=aarch64
|
||||
endif
|
||||
ifeq ($(ARCH),x86_64)
|
||||
APP_ARCH:=x86_64
|
||||
endif
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=A simple, decentralized mesh VPN with WireGuard support.
|
||||
DEPENDS:=@(x86_64||arm||aarch64||mipsel||mips) +kmod-tun
|
||||
URL:=https://github.com/EasyTier/EasyTier
|
||||
MENU:=1
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
A simple, decentralized mesh VPN with WireGuard support.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
if [ ! -f $(PKG_BUILD_DIR)/easytier-core ]; then \
|
||||
wget https://github.com/EasyTier/EasyTier/releases/download/v$(PKG_VERSION)/easytier-linux-$(APP_ARCH)-v$(PKG_VERSION).zip -O $(PKG_BUILD_DIR)/easytier-$(PKG_VERSION).zip; \
|
||||
unzip -o -j $(PKG_BUILD_DIR)/easytier-$(PKG_VERSION).zip -d $(PKG_BUILD_DIR); \
|
||||
rm -f $(PKG_BUILD_DIR)/easytier-$(PKG_VERSION).zip; \
|
||||
fi
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-core $(1)/usr/bin/easytier-core
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-cli $(1)/usr/bin/easytier-cli
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
+9
-4
@@ -3,7 +3,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=easytier
|
||||
PKG_VERSION:=$(or $(EASYTIER_VERSION),2.6.2)
|
||||
PKG_RELEASE:=4
|
||||
PKG_RELEASE:=5
|
||||
|
||||
ifeq ($(ARCH),mipsel)
|
||||
APP_ARCH:=mipsel
|
||||
@@ -37,6 +37,8 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
RSTRIP:=:
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
@@ -74,10 +76,13 @@ endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-core $(1)/usr/bin/easytier-core
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-cli $(1)/usr/bin/easytier-cli
|
||||
$(CP) $(PKG_BUILD_DIR)/easytier-core $(1)/usr/bin/
|
||||
chmod 0755 $(1)/usr/bin/easytier-core
|
||||
$(CP) $(PKG_BUILD_DIR)/easytier-cli $(1)/usr/bin/
|
||||
chmod 0755 $(1)/usr/bin/easytier-cli
|
||||
ifdef CONFIG_EASYTIER_INCLUDE_WEBCONSOLE
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-web-embed $(1)/usr/bin/easytier-web
|
||||
$(CP) $(PKG_BUILD_DIR)/easytier-web-embed $(1)/usr/bin/easytier-web
|
||||
chmod 0755 $(1)/usr/bin/easytier-web
|
||||
endif
|
||||
endef
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hickory-dns
|
||||
PKG_VERSION:=0.26.0-beta.2
|
||||
PKG_RELEASE:=16
|
||||
PKG_RELEASE:=17
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/hickory-dns/hickory-dns/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
@@ -12,6 +12,12 @@ zone_path = "/etc/hickory-dns/lan.zone"
|
||||
journal_path = "/var/lib/hickory-dns/lan.jrnl"
|
||||
allow_update = true
|
||||
|
||||
[[zones.stores.tsig_keys]]
|
||||
name = "update-key."
|
||||
key_file = "/etc/hickory-dns/update.key"
|
||||
algorithm = "hmac-sha256"
|
||||
fudge = 300
|
||||
|
||||
[[zones]]
|
||||
zone = "."
|
||||
zone_type = "External"
|
||||
|
||||
@@ -6,8 +6,17 @@ STOP=51
|
||||
|
||||
PROG=/usr/bin/hickory-dns
|
||||
CONF=/etc/hickory-dns/forwarder.toml
|
||||
TSIG_KEY=/etc/hickory-dns/update.key
|
||||
|
||||
generate_tsig_key() {
|
||||
[ -f "$TSIG_KEY" ] && return 0
|
||||
dd if=/dev/urandom bs=32 count=1 of="$TSIG_KEY" 2>/dev/null
|
||||
chown nobody:nogroup "$TSIG_KEY" 2>/dev/null || true
|
||||
chmod 400 "$TSIG_KEY"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
generate_tsig_key
|
||||
procd_open_instance hickory-dns
|
||||
procd_set_param command $PROG -c $CONF -q
|
||||
procd_set_param user nobody
|
||||
|
||||
@@ -13,7 +13,7 @@ futures = "0.3.11"
|
||||
netlink-packet-route = {version = "0.21" }
|
||||
netlink-packet-core= {version ="0.7"}
|
||||
clap = { version = "4.0", default-features = false, features = ["cargo", "derive", "help", "std", "suggestions"] }
|
||||
hickory-proto = { git = "https://github.com/hickory-dns/hickory-dns.git", rev = "34a4cca1a707b642052b427938b7d1e8aaa71e3a" }
|
||||
hickory-proto = { git = "https://github.com/hickory-dns/hickory-dns.git", rev = "34a4cca1a707b642052b427938b7d1e8aaa71e3a", features = ["dnssec-ring"] }
|
||||
ubus = "0.1.6"
|
||||
serde_json = "1.0.108"
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ipv6-neigh
|
||||
PKG_VERSION:=0.1.0
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_BUILD_DEPENDS:=rust/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr};
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
||||
use hickory_proto::op::{Message, ResponseCode, update_message};
|
||||
use hickory_proto::rr::{Name, RData, RecordSet, RecordType};
|
||||
use hickory_proto::rr::{Name, RData, RecordSet, RecordType, TSigner};
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||
use tokio::net::TcpStream;
|
||||
|
||||
@@ -9,11 +10,12 @@ use tokio::net::TcpStream;
|
||||
pub(crate) struct DnsUpdater {
|
||||
server_addr: SocketAddr,
|
||||
zone: Name,
|
||||
signer: TSigner,
|
||||
}
|
||||
|
||||
impl DnsUpdater {
|
||||
pub fn new(server_addr: SocketAddr, zone: Name) -> Self {
|
||||
Self { server_addr, zone }
|
||||
pub fn new(server_addr: SocketAddr, zone: Name, signer: TSigner) -> Self {
|
||||
Self { server_addr, zone, signer }
|
||||
}
|
||||
|
||||
/// Create or append a AAAA record.
|
||||
@@ -89,7 +91,10 @@ impl DnsUpdater {
|
||||
}
|
||||
|
||||
/// Send a DNS message over TCP (2-byte length prefix + message bytes) and read the response.
|
||||
async fn send_tcp(&self, msg: Message) -> Result<Message, Box<dyn std::error::Error>> {
|
||||
async fn send_tcp(&self, mut msg: Message) -> Result<Message, Box<dyn std::error::Error>> {
|
||||
let now = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs();
|
||||
msg.finalize(&self.signer, now)?;
|
||||
|
||||
let bytes = msg.to_vec()?;
|
||||
let len = u16::try_from(bytes.len())?;
|
||||
|
||||
|
||||
+16
-1
@@ -12,6 +12,8 @@ use rtnetlink::{Error, Handle, new_connection};
|
||||
|
||||
use clap::Parser;
|
||||
use hickory_proto::rr::Name;
|
||||
use hickory_proto::rr::TSigner;
|
||||
use hickory_proto::rr::rdata::tsig::TsigAlgorithm;
|
||||
use netlink_sys::{AsyncSocket, SocketAddr};
|
||||
mod db;
|
||||
mod op;
|
||||
@@ -39,6 +41,12 @@ struct Cli {
|
||||
/// DNS zone to update (e.g. "lan")
|
||||
#[clap(short, long, default_value = "lan")]
|
||||
zone: String,
|
||||
/// Path to TSIG key file (raw HMAC secret)
|
||||
#[clap(short, long, default_value = "/etc/hickory-dns/update.key")]
|
||||
key_file: std::path::PathBuf,
|
||||
/// TSIG key name
|
||||
#[clap(short = 'n', long, default_value = "update-key.")]
|
||||
key_name: String,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -135,7 +143,14 @@ async fn main() -> Result<(), ()> {
|
||||
let args = Cli::parse();
|
||||
let private_subnet = args.private_subnet;
|
||||
let zone = Name::from_ascii(&args.zone).expect("invalid zone name");
|
||||
let updater = db::DnsUpdater::new(args.dns_server, zone);
|
||||
|
||||
let key_data = std::fs::read(&args.key_file)
|
||||
.unwrap_or_else(|e| panic!("failed to read TSIG key file {:?}: {e}", args.key_file));
|
||||
let key_name = Name::from_ascii(&args.key_name).expect("invalid TSIG key name");
|
||||
let signer = TSigner::new(key_data, TsigAlgorithm::HmacSha256, key_name, 300)
|
||||
.expect("invalid TSIG key");
|
||||
|
||||
let updater = db::DnsUpdater::new(args.dns_server, zone, signer);
|
||||
|
||||
let (connection, handle, _) = new_connection().unwrap();
|
||||
tokio::spawn(connection);
|
||||
|
||||
@@ -28,6 +28,21 @@ return L.view.extend({
|
||||
var m, s, o;
|
||||
var boardinfo = res[0];
|
||||
|
||||
function normalizeSchedulerValue(value) {
|
||||
if (value == null)
|
||||
return value;
|
||||
|
||||
var normalized = String(value).trim();
|
||||
|
||||
if (normalized.endsWith('.o'))
|
||||
normalized = normalized.slice(0, -2);
|
||||
|
||||
if (normalized.startsWith('mptcp_'))
|
||||
normalized = normalized.slice(6);
|
||||
|
||||
return normalized;
|
||||
}
|
||||
|
||||
m = new form.Map('network', _('MPTCP'),_('Networks MPTCP settings.'));
|
||||
|
||||
s = m.section(form.TypedSection, 'globals');
|
||||
@@ -73,11 +88,19 @@ return L.view.extend({
|
||||
}
|
||||
|
||||
if (parseFloat(boardinfo.kernel.substring(0,3)) > 6) {
|
||||
scheduler.cfgvalue = function(section_id) {
|
||||
return normalizeSchedulerValue(uci.get('network', section_id, 'mptcp_scheduler'));
|
||||
};
|
||||
|
||||
scheduler.write = function(section_id, value) {
|
||||
uci.set('network', section_id, 'mptcp_scheduler', normalizeSchedulerValue(value));
|
||||
};
|
||||
|
||||
scheduler.load = function(section_id) {
|
||||
return L.resolveDefault(fs.list('/usr/share/bpf/scheduler'), []).then(L.bind(function(entries) {
|
||||
for (var i = 0; i < entries.length; i++)
|
||||
if (entries[i].type == 'file' && entries[i].name.match(/\.o$/))
|
||||
this.value(entries[i].name);
|
||||
this.value(normalizeSchedulerValue(entries[i].name), entries[i].name);
|
||||
return this.super('load', [section_id]);
|
||||
}, this));
|
||||
};
|
||||
|
||||
@@ -225,6 +225,7 @@ msgid ""
|
||||
"The number of MPTCP-level retransmission intervals with no traffic and "
|
||||
"pending outstanding data on a given subflow required to declare it stale"
|
||||
msgstr ""
|
||||
"Количество интервалов повторной передачи MPTCP без трафика и с ожидающими данными на заданном подпотоке, необходимых для его объявления устаревшим"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914
|
||||
msgid "Upload:"
|
||||
@@ -317,9 +318,11 @@ msgid ""
|
||||
"specifies the maximum number of ADD_ADDR suboptions accepted for each MPTCP "
|
||||
"connection"
|
||||
msgstr ""
|
||||
"задаёт максимальное количество подопций ADD_ADDR, принимаемых для каждого соединения MPTCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:59
|
||||
msgid ""
|
||||
"specifies the maximum number of additional subflows allowed for each MPTCP "
|
||||
"connection"
|
||||
msgstr ""
|
||||
"задаёт максимальное количество дополнительных подпотоков, разрешённых для каждого соединения MPTCP"
|
||||
@@ -57,6 +57,172 @@ end
|
||||
|
||||
local methods = {
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
-- Settings: global MPTCP (network.globals)
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
-- Returns all configurable global MPTCP settings from network.globals.
|
||||
get_settings = {
|
||||
call = function()
|
||||
local result = {}
|
||||
local string_fields = {
|
||||
"multipath", "mptcp_checksum", "mptcp_debug",
|
||||
"mptcp_path_manager", "mptcp_scheduler", "mptcp_syn_retries",
|
||||
"mptcp_version", "congestion", "mptcp_pm_type",
|
||||
"mptcp_disable_initial_config", "mptcp_force_multipath",
|
||||
"mptcpd_enable", "mptcp_subflows", "mptcp_stale_loss_cnt",
|
||||
"mptcp_add_addr_accepted", "mptcp_add_addr_timeout",
|
||||
"mptcp_blackhole_timeout", "mptcp_close_timeout",
|
||||
"mptcp_syn_retrans_before_tcp_fallback",
|
||||
"mptcp_fullmesh_num_subflows", "mptcp_fullmesh_create_on_err",
|
||||
"mptcp_ndiffports_num_subflows", "mptcp_rr_cwnd_limited",
|
||||
"mptcp_rr_num_segments"
|
||||
}
|
||||
local list_fields = {
|
||||
"mptcpd_path_manager", "mptcpd_plugins",
|
||||
"mptcpd_addr_flags", "mptcpd_notify_flags"
|
||||
}
|
||||
for _, field in ipairs(string_fields) do
|
||||
local val = uci:get("network", "globals", field)
|
||||
if val ~= nil then result[field] = val end
|
||||
end
|
||||
for _, field in ipairs(list_fields) do
|
||||
local val = uci:get_list("network", "globals", field)
|
||||
result[field] = val or {}
|
||||
end
|
||||
return result
|
||||
end
|
||||
},
|
||||
|
||||
-- Writes one or more global MPTCP settings to network.globals and commits.
|
||||
-- All parameters are optional; only provided (non-empty) ones are written.
|
||||
-- List fields (mptcpd_path_manager, mptcpd_plugins, mptcpd_addr_flags,
|
||||
-- mptcpd_notify_flags) must be passed as JSON arrays.
|
||||
set_settings = {
|
||||
args = {
|
||||
mptcp_checksum = "",
|
||||
mptcp_debug = "",
|
||||
mptcp_path_manager = "",
|
||||
mptcp_scheduler = "",
|
||||
mptcp_syn_retries = "",
|
||||
mptcp_version = "",
|
||||
congestion = "",
|
||||
mptcp_pm_type = "",
|
||||
mptcp_disable_initial_config = "",
|
||||
mptcp_force_multipath = "",
|
||||
mptcpd_enable = "",
|
||||
mptcpd_path_manager = {},
|
||||
mptcpd_plugins = {},
|
||||
mptcpd_addr_flags = {},
|
||||
mptcpd_notify_flags = {},
|
||||
mptcp_subflows = "",
|
||||
mptcp_stale_loss_cnt = "",
|
||||
mptcp_add_addr_accepted = "",
|
||||
mptcp_add_addr_timeout = "",
|
||||
mptcp_blackhole_timeout = "",
|
||||
mptcp_close_timeout = "",
|
||||
mptcp_syn_retrans_before_tcp_fallback = "",
|
||||
mptcp_fullmesh_num_subflows = "",
|
||||
mptcp_fullmesh_create_on_err = "",
|
||||
mptcp_ndiffports_num_subflows = "",
|
||||
mptcp_rr_cwnd_limited = "",
|
||||
mptcp_rr_num_segments = ""
|
||||
},
|
||||
call = function(args)
|
||||
local string_fields = {
|
||||
"mptcp_checksum", "mptcp_debug", "mptcp_path_manager",
|
||||
"mptcp_scheduler", "mptcp_syn_retries", "mptcp_version",
|
||||
"congestion", "mptcp_pm_type", "mptcp_disable_initial_config",
|
||||
"mptcp_force_multipath", "mptcpd_enable", "mptcp_subflows",
|
||||
"mptcp_stale_loss_cnt", "mptcp_add_addr_accepted",
|
||||
"mptcp_add_addr_timeout", "mptcp_blackhole_timeout",
|
||||
"mptcp_close_timeout", "mptcp_syn_retrans_before_tcp_fallback",
|
||||
"mptcp_fullmesh_num_subflows", "mptcp_fullmesh_create_on_err",
|
||||
"mptcp_ndiffports_num_subflows", "mptcp_rr_cwnd_limited",
|
||||
"mptcp_rr_num_segments"
|
||||
}
|
||||
local list_fields = {
|
||||
"mptcpd_path_manager", "mptcpd_plugins",
|
||||
"mptcpd_addr_flags", "mptcpd_notify_flags"
|
||||
}
|
||||
for _, field in ipairs(string_fields) do
|
||||
if args[field] ~= nil and args[field] ~= "" then
|
||||
uci:set("network", "globals", field, args[field])
|
||||
end
|
||||
end
|
||||
for _, field in ipairs(list_fields) do
|
||||
if args[field] ~= nil and type(args[field]) == "table" then
|
||||
uci:set_list("network", "globals", field, args[field])
|
||||
end
|
||||
end
|
||||
uci:save("network")
|
||||
uci:commit("network")
|
||||
return { result = "ok" }
|
||||
end
|
||||
},
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
-- Settings: per-interface MPTCP (network.interface)
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
-- Returns multipath settings for all interfaces (or a single one when
|
||||
-- the optional "iface" argument is provided).
|
||||
get_interface_settings = {
|
||||
args = { iface = "" },
|
||||
call = function(args)
|
||||
local iface = args.iface or ""
|
||||
if iface ~= "" then
|
||||
local section = uci:get_all("network", iface)
|
||||
if not section or section[".type"] ~= "interface" then
|
||||
return { error = "Interface not found" }
|
||||
end
|
||||
return {
|
||||
multipath = section["multipath"] or "off",
|
||||
multipath_weight = section["multipath_weight"] or "100"
|
||||
}
|
||||
end
|
||||
local result = {}
|
||||
uci:foreach("network", "interface", function(s)
|
||||
local name = s[".name"]
|
||||
result[name] = {
|
||||
multipath = s["multipath"] or "off",
|
||||
multipath_weight = s["multipath_weight"] or "100"
|
||||
}
|
||||
end)
|
||||
return result
|
||||
end
|
||||
},
|
||||
|
||||
-- Sets multipath and/or multipath_weight for the given interface.
|
||||
-- "iface" is required; "multipath" and "multipath_weight" are optional.
|
||||
-- Valid values for multipath: "on", "off", "master", "backup".
|
||||
set_interface_settings = {
|
||||
args = { iface = "", multipath = "", multipath_weight = "" },
|
||||
call = function(args)
|
||||
local iface = args.iface or ""
|
||||
if iface == "" then
|
||||
return { error = "Interface name required" }
|
||||
end
|
||||
local section = uci:get_all("network", iface)
|
||||
if not section or section[".type"] ~= "interface" then
|
||||
return { error = "Interface not found" }
|
||||
end
|
||||
if args.multipath ~= nil and args.multipath ~= "" then
|
||||
uci:set("network", iface, "multipath", args.multipath)
|
||||
end
|
||||
if args.multipath_weight ~= nil and args.multipath_weight ~= "" then
|
||||
uci:set("network", iface, "multipath_weight", args.multipath_weight)
|
||||
end
|
||||
uci:save("network")
|
||||
uci:commit("network")
|
||||
return { result = "ok" }
|
||||
end
|
||||
},
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
-- Bandwidth / diagnostics (existing methods below)
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
-- Returns per-interface bandwidth arrays plus a "total" entry.
|
||||
-- Each value is an array of [ts, rx_bytes, rx_pkts, tx_bytes, tx_pkts].
|
||||
multipath_bandwidth = {
|
||||
|
||||
@@ -18,7 +18,11 @@
|
||||
"mptcp_fullmesh",
|
||||
"mptcp_monitor",
|
||||
"mptcp_connections",
|
||||
"mptcp_check_trace"
|
||||
"mptcp_check_trace",
|
||||
"get_settings",
|
||||
"set_settings",
|
||||
"get_interface_settings",
|
||||
"set_interface_settings"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall
|
||||
PKG_VERSION:=26.4.15
|
||||
PKG_RELEASE:=101
|
||||
PKG_RELEASE:=102
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -555,6 +555,7 @@ o:depends({singbox_dns_mode = "udp"})
|
||||
o:depends({singbox_dns_mode = "tcp"})
|
||||
|
||||
o = s:option(Value, "remote_dns_doh", translate("Remote DNS DoH"))
|
||||
o.description = translate("Format: URL[,IP] (omit the latter if URL is an IP)")
|
||||
o:value("https://1.1.1.1/dns-query", "1.1.1.1 (CloudFlare)")
|
||||
o:value("https://1.1.1.2/dns-query", "1.1.1.2 (CloudFlare-Security)")
|
||||
o:value("https://8.8.4.4/dns-query", "8.8.4.4 (Google)")
|
||||
@@ -565,7 +566,7 @@ o:value("https://208.67.222.222/dns-query", "208.67.222.222 (OpenDNS)")
|
||||
o:value("https://dns.adguard.com/dns-query,94.140.14.14", "94.140.14.14 (AdGuard)")
|
||||
o:value("https://doh.libredns.gr/dns-query,116.202.176.26", "116.202.176.26 (LibreDNS)")
|
||||
o:value("https://doh.libredns.gr/ads,116.202.176.26", "116.202.176.26 (LibreDNS-NoAds)")
|
||||
o.default = "https://1.1.1.1/dns-query"
|
||||
o.default = o.keylist[1]
|
||||
o.validate = function(self, value, t)
|
||||
if value ~= "" then
|
||||
value = api.trim(value)
|
||||
|
||||
@@ -444,7 +444,8 @@ o:depends({singbox_dns_mode = "tcp"})
|
||||
|
||||
---- DoH
|
||||
o = s:taboption("DNS", Value, "remote_dns_doh", translate("Remote DNS DoH"))
|
||||
o.default = "https://1.1.1.1/dns-query"
|
||||
o.description = translate("Format: URL[,IP] (omit the latter if URL is an IP)")
|
||||
o.default = o.keylist[1]
|
||||
o:value("https://1.1.1.1/dns-query", "1.1.1.1 (CloudFlare)")
|
||||
o:value("https://1.1.1.2/dns-query", "1.1.1.2 (CloudFlare-Security)")
|
||||
o:value("https://8.8.4.4/dns-query", "8.8.4.4 (Google)")
|
||||
|
||||
@@ -220,6 +220,9 @@ msgstr "请求协议"
|
||||
msgid "Remote DNS DoH"
|
||||
msgstr "远程 DNS DoH"
|
||||
|
||||
msgid "Format: URL[,IP] (omit the latter if URL is an IP)"
|
||||
msgstr "格式:URL[,IP](URL 为 IP 时可省略后半部分)"
|
||||
|
||||
msgid "Notify the DNS server when the DNS query is notified, the location of the client (cannot be a private IP address)."
|
||||
msgstr "用于 DNS 查询时通知 DNS 服务器,客户端所在的地理位置(不能是私有 IP 地址)。"
|
||||
|
||||
|
||||
@@ -286,17 +286,22 @@ function add_rule(var)
|
||||
if domain == "" or domain:find("#") then
|
||||
return
|
||||
end
|
||||
table.insert(excluded_domain, domain)
|
||||
excluded_domain[domain] = true
|
||||
end
|
||||
|
||||
local function check_excluded_domain(domain)
|
||||
if domain == "" or domain:find("#") then
|
||||
return false
|
||||
end
|
||||
for k,v in ipairs(excluded_domain) do
|
||||
if domain == v or domain:sub(-#("."..v)) == "."..v then
|
||||
if excluded_domain[domain] then
|
||||
return true
|
||||
end
|
||||
local pos = domain:find(".", 1, true)
|
||||
while pos do
|
||||
if excluded_domain[domain:sub(pos + 1)] then
|
||||
return true
|
||||
end
|
||||
pos = domain:find(".", pos + 1, true)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -44,6 +44,8 @@ msgid ""
|
||||
"Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress "
|
||||
"shaping:"
|
||||
msgstr ""
|
||||
"Скорость загрузки (Кбит/с) (входящий трафик), установите 0 для отключения "
|
||||
"формирования входящего трафика:"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:58
|
||||
msgid "Enable SQM"
|
||||
@@ -63,6 +65,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Explicit congestion notification (ECN) status on outbound packets (egress)."
|
||||
msgstr ""
|
||||
"Состояние явного уведомления о перегрузке (ECN) для исходящих пакетов (egress)."
|
||||
|
||||
#: applications/luci-app-sqm/root/usr/share/rpcd/acl.d/luci-app-sqm.json:3
|
||||
msgid "Grant UCI access for luci-app-sqm"
|
||||
@@ -82,7 +85,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:142
|
||||
msgid "Ignore DSCP on ingress:"
|
||||
msgstr ""
|
||||
msgstr "Игнорировать DSCP для входящего трафика:"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:89
|
||||
msgid "Interface name"
|
||||
@@ -93,12 +96,16 @@ msgid ""
|
||||
"Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for "
|
||||
"automatic selection, put in the word default for the qdisc's default."
|
||||
msgstr ""
|
||||
"Целевая задержка для исходящего трафика, напр. 5ms [единицы: s, ms, или us]; оставьте пустым для "
|
||||
"автоматического выбора, введите слово default для значения по умолчанию qdisc."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:172
|
||||
msgid ""
|
||||
"Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for "
|
||||
"automatic selection, put in the word default for the qdisc's default."
|
||||
msgstr ""
|
||||
"Целевая задержка для входящего трафика, напр. 5ms [единицы: s, ms, или us]; оставьте пустым для "
|
||||
"автоматического выбора, введите слово default для значения по умолчанию qdisc."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:74
|
||||
msgid "Link Layer Adaptation"
|
||||
@@ -109,6 +116,8 @@ msgid ""
|
||||
"Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= "
|
||||
"interface MTU + overhead:"
|
||||
msgstr ""
|
||||
"Максимальный размер для расчётов размера и скорости, tcMTU (байт); должен быть >= "
|
||||
"MTU интерфейса + накладные расходы:"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:213
|
||||
msgid ""
|
||||
@@ -122,14 +131,16 @@ msgid ""
|
||||
"Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU "
|
||||
"+ 1) / 16:"
|
||||
msgstr ""
|
||||
"Количество записей в таблицах размер/скорость, TSIZE; для ATM выберите TSIZE = (tcMTU "
|
||||
"+ 1) / 16:"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:193
|
||||
msgid "Per Packet Overhead (byte):"
|
||||
msgstr ""
|
||||
msgstr "Накладные расходы на пакет (байт):"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:73
|
||||
msgid "Queue Discipline"
|
||||
msgstr ""
|
||||
msgstr "Дисциплина очереди"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:120
|
||||
msgid "Queue setup script"
|
||||
@@ -144,6 +155,8 @@ msgid ""
|
||||
"Queuing disciplines useable on this system. After installing a new qdisc, "
|
||||
"you need to restart the router to see updates!"
|
||||
msgstr ""
|
||||
"Дисциплины очереди, доступные на этой системе. После установки нового qdisc "
|
||||
"необходимо перезагрузить маршрутизатор, чтобы увидеть обновления!"
|
||||
|
||||
#: applications/luci-app-sqm/root/usr/share/luci/menu.d/luci-app-sqm.json:3
|
||||
msgid "SQM QoS"
|
||||
@@ -154,18 +167,24 @@ msgid ""
|
||||
"Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced "
|
||||
"options will only be used as long as this box is checked."
|
||||
msgstr ""
|
||||
"Показать расширенные параметры канального уровня (нужны только если MTU > 1500). "
|
||||
"Расширенные параметры используются только пока этот флажок установлен."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:133
|
||||
msgid ""
|
||||
"Show and Use Advanced Configuration. Advanced options will only be used as "
|
||||
"long as this box is checked."
|
||||
msgstr ""
|
||||
"Показать и использовать расширенную конфигурацию. Расширенные параметры "
|
||||
"используются только пока этот флажок установлен."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:160
|
||||
msgid ""
|
||||
"Show and Use Dangerous Configuration. Dangerous options will only be used as "
|
||||
"long as this box is checked."
|
||||
msgstr ""
|
||||
"Показать и использовать опасную конфигурацию. Опасные параметры "
|
||||
"используются только пока этот флажок установлен."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:64
|
||||
msgid "Smart Queue Management"
|
||||
@@ -173,7 +192,7 @@ msgstr "Умное управление очередью"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:136
|
||||
msgid "Squash DSCP on inbound packets (ingress):"
|
||||
msgstr ""
|
||||
msgstr "Обнулить DSCP для входящих пакетов (ingress):"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:83
|
||||
msgid ""
|
||||
@@ -181,18 +200,25 @@ msgid ""
|
||||
"disable the sqm initscript manually under System Startup menu in case this "
|
||||
"change was not wished for."
|
||||
msgstr ""
|
||||
"Интерфейс SQM только что включил скрипт инициализации sqm от вашего имени. Не забудьте "
|
||||
"вручную отключить скрипт инициализации sqm в меню запуска системы, если это изменение "
|
||||
"не было желаемым."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:48
|
||||
msgid ""
|
||||
"The SQM service seems to be disabled. Please use the button below to "
|
||||
"activate this service."
|
||||
msgstr ""
|
||||
"Похоже, служба SQM отключена. Используйте кнопку ниже для "
|
||||
"активации этой службы."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:96
|
||||
msgid ""
|
||||
"Upload speed (kbit/s) (egress) set to 0 to selectively disable egress "
|
||||
"shaping:"
|
||||
msgstr ""
|
||||
"Скорость отдачи (Кбит/с) (исходящий трафик), установите 0 для отключения "
|
||||
"формирования исходящего трафика:"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:103
|
||||
msgid "Verbosity of SQM's output into the system log."
|
||||
@@ -200,11 +226,11 @@ msgstr "Детальность вывода SQM в системный журна
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:187
|
||||
msgid "Which link layer to account for:"
|
||||
msgstr ""
|
||||
msgstr "Какой канальный уровень учитывать:"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:218
|
||||
msgid "Which linklayer adaptation mechanism to use; for testing only"
|
||||
msgstr ""
|
||||
msgstr "Какой механизм адаптации канального уровня использовать; только для тестирования"
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:65
|
||||
msgid ""
|
||||
@@ -212,6 +238,9 @@ msgid ""
|
||||
"traffic shaping, better mixing (Fair Queueing), active queue length "
|
||||
"management (AQM) and prioritisation on one network interface."
|
||||
msgstr ""
|
||||
"С помощью <abbr title=\"Smart Queue Management\">SQM</abbr> вы можете включить "
|
||||
"формирование трафика, улучшенное смешивание (справедливая очередь), активное управление "
|
||||
"длиной очереди (AQM) и расстановку приоритетов на одном сетевом интерфейсе."
|
||||
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:107
|
||||
#: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:149
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-wechatpush
|
||||
PKG_VERSION:=3.6.12
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_MAINTAINER:=tty228 <tty228@yeah.net>
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -256,11 +256,21 @@ return view.extend({
|
||||
o.depends('jsonpath', '/usr/share/wechatpush/api/msmtp.json');
|
||||
o.placeholder = "25";
|
||||
|
||||
o = s.taboption('basic', form.Flag, 'smtp_tls', _('Enable TLS'));
|
||||
o = s.taboption('basic', form.ListValue, 'smtp_tls', _('Enable/Disable TLS'));
|
||||
o.depends('jsonpath', '/usr/share/wechatpush/api/msmtp.json');
|
||||
o.widget = 'radio';
|
||||
o.value('on', _('Enable'));
|
||||
o.value('off', _('Disable'));
|
||||
o.value('', _('Ignore'));
|
||||
o.default = '';
|
||||
|
||||
o = s.taboption('basic', form.Flag, 'smtp_starttls', _('Enable STARTTLS'));
|
||||
o = s.taboption('basic', form.ListValue, 'smtp_starttls', _('Enable/Disable STARTTLS'));
|
||||
o.depends('jsonpath', '/usr/share/wechatpush/api/msmtp.json');
|
||||
o.widget = 'radio';
|
||||
o.value('on', _('Enable'));
|
||||
o.value('off', _('Disable'));
|
||||
o.value('', _('Ignore'));
|
||||
o.default = '';
|
||||
|
||||
o = s.taboption('basic', form.Value, 'smtp_user', _('User'));
|
||||
o.depends('jsonpath', '/usr/share/wechatpush/api/msmtp.json');
|
||||
|
||||
@@ -231,11 +231,11 @@ msgstr "SMTP 服务器"
|
||||
msgid "SMTP Port"
|
||||
msgstr "SMTP 端口"
|
||||
|
||||
msgid "Enable TLS"
|
||||
msgstr "启用 TLS"
|
||||
msgid "Enable/Disable TLS"
|
||||
msgstr "启用/禁用 TLS"
|
||||
|
||||
msgid "Enable STARTTLS"
|
||||
msgstr "启用 STARTTLS"
|
||||
msgid "Enable/Disable STARTTLS"
|
||||
msgstr "启用/禁用 STARTTLS"
|
||||
|
||||
msgid "User"
|
||||
msgstr "用户名"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"_api": "这是 msmtp api 文件",
|
||||
"_api": "【msmtp】",
|
||||
|
||||
"url": "msmtp --host=${smtp_host} --port=${smtp_port} ${smtp_tls:+--tls=on} ${smtp_tls:---tls=off} ${smtp_starttls:+--tls-starttls=on} ${smtp_starttls:---tls-starttls=off} ${smtp_user:+--auth=on --user=$smtp_user} ${smtp_passwordeval:+--passwordeval=\\\"$smtp_passwordeval\\\"} ${smtp_from:+--from=$smtp_from} ${smtp_from_full_name:+-F\\\"$smtp_from_full_name\\\"} ${recipient_email}",
|
||||
"url": "msmtp --host=${smtp_host} --port=${smtp_port} ${smtp_tls:+--tls=$smtp_tls} ${smtp_starttls:+--tls-starttls=$smtp_starttls} ${smtp_user:+--auth=on --user=$smtp_user} ${smtp_passwordeval:+--passwordeval=\\\"$smtp_passwordeval\\\"} ${smtp_from:+--from=$smtp_from} ${smtp_from_full_name:+-F\\\"$smtp_from_full_name\\\"} ${recipient_email}",
|
||||
"data": "${tempjsonpath}",
|
||||
"content_type": "",
|
||||
"command": "'\"To: \\(.to)\\nSubject: \\(.subject)\\nContent-Type: text/html\\n\\n\\(.body)\"'",
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mptcp
|
||||
PKG_VERSION:=6.1
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_MAINTAINER:=Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
@@ -74,10 +74,12 @@ global_multipath_settings() {
|
||||
[ -z "$mptcp_close_timeout" ] || sysctl -qew net.mptcp.close_timeout="$mptcp_close_timeout"
|
||||
[ -z "$mptcp_syn_retrans_before_tcp_fallback" ] || sysctl -qew net.mptcp.syn_retrans_before_tcp_fallback="$mptcp_syn_retrans_before_tcp_fallback"
|
||||
[ -z "$mptcp_blackhole_timeout" ] || sysctl -qew net.mptcp.blackhole_timeout="$mptcp_blackhole_timeout"
|
||||
if [ -n "$mptcp_scheduler" ] && [ -d /usr/share/bpf/scheduler ]; then
|
||||
for scheduler in /usr/share/bpf/scheduler/*.o; do
|
||||
[ -f "$scheduler" ] && bpftool struct_ops register "$scheduler" >/dev/null 2>&1
|
||||
done
|
||||
if [ -n "$mptcp_scheduler" ]; then
|
||||
if [ -d /usr/share/bpf/scheduler ]; then
|
||||
for scheduler in /usr/share/bpf/scheduler/*.o; do
|
||||
[ -f "$scheduler" ] && bpftool struct_ops register "$scheduler" >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
local sched="${mptcp_scheduler#mptcp_}"; sched="${sched%.o}"
|
||||
sysctl -qew net.mptcp.scheduler="$sched" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
+7
-3
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=teleproxy
|
||||
PKG_VERSION:=4.12.0
|
||||
PKG_RELEASE:=5
|
||||
PKG_VERSION:=4.12.2
|
||||
PKG_RELEASE:=6
|
||||
|
||||
PKG_MAINTAINER:=Kosntantine Shevlakov <shevlakov@132lan.ru>
|
||||
PKG_LICENSE:=GPLv2
|
||||
@@ -10,7 +10,7 @@ PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/teleproxy/teleproxy.git
|
||||
PKG_SOURCE_VERSION:=1785ace7dfa4bda781c8e52be483e4db22282681
|
||||
PKG_SOURCE_VERSION:=06ecb7a06d02669677a0f669119b29f7e9d1d743
|
||||
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
@@ -28,6 +28,10 @@ define Package/$(PKG_NAME)
|
||||
DEPENDS:=+libopenssl +zlib
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/conffiles
|
||||
/etc/config/$(PKG_NAME)
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin \
|
||||
$(1)/usr/share \
|
||||
|
||||
Reference in new issue
Block a user