diff --git a/package/ctcgfw/luci-app-turboacc/Makefile b/package/ctcgfw/luci-app-turboacc/Makefile new file mode 100644 index 0000000000..d060bdd05b --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/Makefile @@ -0,0 +1,51 @@ +# 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-turboacc +PKG_VERSION:=1.0 +PKG_RELEASE:=2 + +PKG_LICENSE:=GPLv3.0+ + +LUCI_TITLE:=LuCI support for Flow Offload / Shortcut-FE +LUCI_DEPENDS:=+pdnsd-alt \ + +PACKAGE_$(PKG_NAME)_INCLUDE_shortcut-fe:kmod-fast-classifier \ + +PACKAGE_$(PKG_NAME)_INCLUDE_flow-offload:kmod-ipt-offload \ + +PACKAGE_$(PKG_NAME)_INCLUDE_bbr-cca:kmod-tcp-bbr \ + +PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder:dnsforwarder +LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/config +config PACKAGE_$(PKG_NAME)_INCLUDE_shortcut-fe + bool "Include Shortcut-FE" + depends on PACKAGE_$(PKG_NAME)_INCLUDE_flow-offload=n + default y if LINUX_4_9 + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_flow-offload + bool "Include Flow Offload" + depends on !LINUX_4_9 + default y + +config PACKAGE_$(PKG_NAME)_INCLUDE_bbr-cca + bool "Include BBR CCA" + default y + +config PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder + bool "Include DNSForwarder" + default n +endef + +PKG_CONFIG_DEPENDS:= \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_shortcut-fe \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_flow-offload \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_bbr-cca \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_dnsforwarder + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-turboacc/luasrc/controller/turboacc.lua b/package/ctcgfw/luci-app-turboacc/luasrc/controller/turboacc.lua new file mode 100644 index 0000000000..259859fc1c --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/luasrc/controller/turboacc.lua @@ -0,0 +1,39 @@ +module("luci.controller.turboacc", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/turboacc") then + return + end + local page + page = entry({"admin", "network", "turboacc"}, cbi("turboacc"), _("Turbo ACC Center"), 101) + page.i18n = "turboacc" + page.dependent = true + + entry({"admin", "network", "turboacc", "status"}, call("action_status")) +end + +local function fastpath_status() + return luci.sys.call("{ [ -e /sys/module/xt_FLOWOFFLOAD/refcnt ] && [ x$(cat /sys/module/xt_FLOWOFFLOAD/refcnt 2>/dev/null) != x0 ]; } || lsmod | grep -q fast_classifier") == 0 +end + +local function bbr_status() + return luci.sys.call("[ x$(cat /proc/sys/net/ipv4/tcp_congestion_control 2>/dev/null) = xbbr ]") == 0 +end + +local function fullconebat_status() + return luci.sys.call("[ -e /sys/module/xt_FULLCONENAT/refcnt ] && [ x$(cat /sys/module/xt_FULLCONENAT/refcnt 2>/dev/null) != x0 ]") == 0 +end + +local function dnscaching_status() + return luci.sys.call("pgrep dnscache >/dev/null") == 0 +end + +function action_status() + luci.http.prepare_content("application/json") + luci.http.write_json({ + fastpath_state = fastpath_status(), + bbr_state = bbr_status(), + fullconenat_state = fullconebat_status(), + dnscaching_state = dnscaching_status() + }) +end diff --git a/package/ctcgfw/luci-app-turboacc/luasrc/model/cbi/turboacc.lua b/package/ctcgfw/luci-app-turboacc/luasrc/model/cbi/turboacc.lua new file mode 100644 index 0000000000..12892733a1 --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/luasrc/model/cbi/turboacc.lua @@ -0,0 +1,87 @@ +local kernel_version = luci.sys.exec("echo -n $(uname -r)") + +m = Map("turboacc") +m.title = translate("Turbo ACC Acceleration Settings") +m.description = translate("Opensource Flow Offloading driver (Fast Path or Hardware NAT)") + +m:append(Template("turboacc/status")) + +s = m:section(TypedSection, "turboacc", "") +s.addremove = false +s.anonymous = true + +if nixio.fs.access("/lib/modules/" .. kernel_version .. "/xt_FLOWOFFLOAD.ko") then +sw_flow = s:option(Flag, "sw_flow", translate("Software flow offloading")) +sw_flow.default = 0 +sw_flow.description = translate("Software based offloading for routing/NAT") +sw_flow:depends("sfe_flow", 0) +end + +if luci.sys.call("cat /proc/cpuinfo | grep -q MT76") == 0 then +hw_flow = s:option(Flag, "hw_flow", translate("Hardware flow offloading")) +hw_flow.default = 0 +hw_flow.description = translate("Requires hardware NAT support. Implemented at least for mt76xx") +hw_flow:depends("sw_flow", 1) +end + +if nixio.fs.access("/lib/modules/" .. kernel_version .. "/fast-classifier.ko") then +sfe_flow = s:option(Flag, "sfe_flow", translate("Shortcut-FE flow offloading")) +sfe_flow.default = 0 +sfe_flow.description = translate("Shortcut-FE based offloading for routing/NAT") +sfe_flow:depends("sw_flow", 0) +end + +sfe_bridge = s:option(Flag, "sfe_bridge", translate("Bridge Acceleration")) +sfe_bridge.default = 0 +sfe_bridge.description = translate("Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN server)") +sfe_bridge:depends("sfe_flow", 1) + +if nixio.fs.access("/proc/sys/net/ipv6") then +sfe_ipv6 = s:option(Flag, "sfe_ipv6", translate("IPv6 Acceleration")) +sfe_ipv6.default = 0 +sfe_ipv6.description = translate("Enable IPv6 Acceleration") +sfe_ipv6:depends("sfe_flow", 1) +end + +if nixio.fs.access("/lib/modules/" .. kernel_version .. "/tcp_bbr.ko") then +bbr_cca = s:option(Flag, "bbr_cca", translate("BBR CCA")) +bbr_cca.default = 0 +bbr_cca.description = translate("Using BBR CCA can improve TCP network performance effectively") +end + +if nixio.fs.access("/lib/modules/" .. kernel_version .. "/xt_FULLCONENAT.ko") then +fullcone_nat = s:option(Flag, "fullcone_nat", translate("FullCone NAT")) +fullcone_nat.default = 0 +fullcone_nat.description = translate("Using FullCone NAT can improve gaming performance effectively") +end + +dns_acc = s:option(Flag, "dns_acc", translate("DNS Acceleration")) +dns_acc.default = 0 +dns_acc.rmempty = false +dns_acc.description = translate("Using optimized DNS records for GoogleHosts (Don't use under Clash Fake-IP mode)") + +dns_caching = s:option(Flag, "dns_caching", translate("DNS Caching")) +dns_caching.default = 0 +dns_caching.rmempty = false +dns_caching.description = translate("Enable DNS Caching and anti ISP DNS pollution") + +dns_caching_mode = s:option(ListValue, "dns_caching_mode", translate("Resolve DNS Mode"), translate("Only PDNSD and DNSForwarder is supported now")) +dns_caching_mode:value("1", translate("Using PDNSD to query and cache")) +if nixio.fs.access("/usr/bin/dnsforwarder") then +dns_caching_mode:value("2", translate("Using DNSForwarder to query and cache")) +end +dns_caching_mode.default = 1 +dns_caching_mode:depends("dns_caching", 1) + +dns_caching_v4_dns = s:option(Value, "dns_caching_v4_dns", translate("Upsteam IPv4 DNS Server")) +dns_caching_v4_dns.default = "114.114.114.114,114.114.115.115,223.5.5.5,223.6.6.6,180.76.76.76,119.29.29.29,119.28.28.28,1.2.4.8,210.2.4.8" +dns_caching_v4_dns.description = translate("Muitiple IPv4 DNS server can saperate with ','") +dns_caching_v4_dns:depends("dns_caching_mode", 1) +dns_caching_v4_dns:depends("dns_caching_mode", 2) + +dns_caching_v6_dns = s:option(Value, "dns_caching_v6_dns", translate("Upsteam IPv6 DNS Server")) +dns_caching_v6_dns.default = "2001:4860:4860::8888,2001:4860:4860::8844,2001:2001::1111,2001:2001::1001,2400:da00::6666,240C::6666,240C::6644" +dns_caching_v6_dns.description = translate("Muitiple IPv6 DNS server can saperate with ','") +dns_caching_v6_dns:depends("dns_caching_mode", 2) + +return m diff --git a/package/ctcgfw/luci-app-turboacc/luasrc/view/turboacc/status.htm b/package/ctcgfw/luci-app-turboacc/luasrc/view/turboacc/status.htm new file mode 100644 index 0000000000..9a834888d9 --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/luasrc/view/turboacc/status.htm @@ -0,0 +1,25 @@ +
+ + diff --git a/package/ctcgfw/luci-app-turboacc/po/zh-cn/turboacc.po b/package/ctcgfw/luci-app-turboacc/po/zh-cn/turboacc.po new file mode 100644 index 0000000000..2b533be79e --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/po/zh-cn/turboacc.po @@ -0,0 +1,107 @@ +msgid "Turbo ACC Center" +msgstr "Turbo ACC 网络加速" + +msgid "Turbo ACC Acceleration Settings" +msgstr "Turbo ACC 网络加速设置" + +msgid "Linux Flow Offload Forwarding Engine Settings" +msgstr "Linux Flow Offload Forwarding 转发加速引擎设置" + +msgid "Opensource Flow Offloading driver (Fast Path or Hardware NAT)" +msgstr "开源流量分载驱动 (支持 Fast Path 或者 硬件 NAT)" + +msgid "Software flow offloading" +msgstr "软件流量分载" + +msgid "Software based offloading for routing/NAT" +msgstr "基于软件的 Routing/NAT 分载" + +msgid "Hardware flow offloading" +msgstr "硬件流量分载" + +msgid "Requires hardware NAT support. Implemented at least for mt76xx" +msgstr "需要硬件 NAT 支持。目前 mt76xx 已实现" + +msgid "Shortcut-FE flow offloading" +msgstr "Shortcut-FE 流量分载" + +msgid "Shortcut-FE based offloading for routing/NAT" +msgstr "基于 Shortcut-FE 的 Routing/NAT 分载" + +msgid "Bridge Acceleration" +msgstr "桥接加速" + +msgid "Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN server)" +msgstr "启用桥接加速 (可能会和路由器上桥接模式的VPN服务器冲突)" + +msgid "IPv6 Acceleration" +msgstr "IPv6 加速" + +msgid "Enable IPv6 Acceleration" +msgstr "启用 IPv6 加速" + +msgid "BBR CCA" +msgstr "BBR 拥塞控制算法" + +msgid "Using BBR CCA can improve TCP network performance effectively" +msgstr "使用 BBR 拥塞控制算法可以有效提升 TCP 网络性能" + +msgid "FullCone NAT" +msgstr "全锥形 NAT" + +msgid "Using FullCone NAT can improve gaming performance effectively" +msgstr "使用全锥形 NAT 可以有效提升游戏体验" + +msgid "DNS Acceleration" +msgstr "DNS 加速" + +msgid "Using optimized DNS records for GoogleHosts (Don't use under Clash Fake-IP mode)" +msgstr "使用来自 GoogleHosts 的优质 DNS 记录(请勿在 Clash Fake-IP 模式下使用)" + +msgid "DNS Caching" +msgstr "DNS 缓存" + +msgid "Enable DNS Caching and anti ISP DNS pollution" +msgstr "启用 DNS 多线程查询、缓存,并防止 ISP 的 DNS 广告和域名劫持" + +msgid "Resolve DNS Mode" +msgstr "DNS 解析方式" + +msgid "Only PDNSD and DNSForwarder is supported now" +msgstr "目前仅支持 PDNSD 和 DNSForwarder" + +msgid "Using PDNSD to query and cache" +msgstr "使用 PDNSD 解析" + +msgid "Using DNSForwarder to query and cache" +msgstr "使用 DNSForwarder 解析" + +msgid "Upsteam IPv4 DNS Server" +msgstr "上游 IPv4 DNS 服务器" + +msgid "Muitiple IPv4 DNS server can saperate with ','" +msgstr "多个上游 IPv4 DNS 服务器请用 ',' 分隔(注意用英文逗号)" + +msgid "Upsteam IPv6 DNS Server" +msgstr "上游 IPv6 DNS 服务器" + +msgid "Muitiple IPv6 DNS server can saperate with ','" +msgstr "多个上游 IPv6 DNS 服务器请用 ',' 分隔(注意用英文逗号)" + +msgid "Running Status" +msgstr "运行状态" + +msgid "Flow Offloading" +msgstr "流量分载" + +msgid "BBR CCA" +msgstr "BBR 拥塞控制算法" + +msgid "FullCone NAT" +msgstr "全锥型 NAT" + +msgid "DNS Caching" +msgstr "DNS 缓存" + +msgid "Open Web Interface" +msgstr "打开 Web 界面" diff --git a/package/ctcgfw/luci-app-turboacc/root/etc/config/turboacc b/package/ctcgfw/luci-app-turboacc/root/etc/config/turboacc new file mode 100644 index 0000000000..067aad2763 --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/root/etc/config/turboacc @@ -0,0 +1,14 @@ + +config turboacc 'config' + option sw_flow '1' + option hw_flow '1' + option sfe_flow '1' + option sfe_bridge '1' + option sfe_ipv6 '0' + option bbr_cca '1' + option fullcone_nat '1' + option dns_acc '0' + option dns_caching '0' + option dns_caching_mode '1' + option dns_caching_v4_dns '114.114.114.114,114.114.115.115,223.5.5.5,223.6.6.6,180.76.76.76,119.29.29.29,119.28.28.28,1.2.4.8,210.2.4.8' + option dns_caching_v6_dns '240c::6666,240c::6644,2001:da8::666,2001:da8:202:10::36,2001:da8:8000:1:202:120:2:100' diff --git a/package/ctcgfw/luci-app-turboacc/root/etc/init.d/turboacc b/package/ctcgfw/luci-app-turboacc/root/etc/init.d/turboacc new file mode 100755 index 0000000000..3064f305cc --- /dev/null +++ b/package/ctcgfw/luci-app-turboacc/root/etc/init.d/turboacc @@ -0,0 +1,295 @@ +#!/bin/sh /etc/rc.common +# Copyright (c) 2011-2015 OpenWrt.org + +START=90 +STOP=10 + +restart_utils="true" + +inital_conf(){ + config_load "turboacc" + config_get "sw_flow" "config" "sw_flow" "0" + config_get "hw_flow" "config" "hw_flow" "0" + config_get "sfe_flow" "config" "sfe_flow" "0" + config_get "sfe_bridge" "config" "sfe_bridge" "0" + config_get "sfe_ipv6" "config" "sfe_ipv6" "0" + config_get "bbr_cca" "config" "bbr_cca" "0" + config_get "fullcone_nat" "config" "fullcone_nat" "0" + config_get "dns_acc" "config" "dns_acc" "0" + config_get "dns_caching" "config" "dns_caching" "0" + config_get "dns_caching_mode" "config" "dns_caching_mode" "0" + config_get "dns_caching_v4_dns" "config" "dns_caching_v4_dns" + config_get "dns_caching_v6_dns" "config" "dns_caching_v6_dns" + + [ ! -e "/lib/modules/$(uname -r)/xt_FLOWOFFLOAD.ko" ] && { sw_flow="0"; hw_flow="0"; } + [ ! -e "/lib/modules/$(uname -r)/fast-classifier.ko" ] && { sfe_flow="0"; sfe_bridge="0"; sfe_ipv6="0"; } + [ ! -e "/lib/modules/$(uname -r)/tcp_bbr.ko" ] && bbr_cca="0" + [ ! -e "/lib/modules/$(uname -r)/xt_FULLCONENAT.ko" ] && fullcone_nat="0" +} + +start_pdnsd() { + [ -d "/var/etc" ] || mkdir -p "/var/etc" + cat > "/var/etc/dnscache.conf" <