diff --git a/applications/luci-app-systools/Makefile b/applications/luci-app-systools/Makefile index 630db8d1..a3bbb790 100644 --- a/applications/luci-app-systools/Makefile +++ b/applications/luci-app-systools/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk -PKG_VERSION:=1.0.4-20230718 +PKG_VERSION:=1.0.5-20231215 PKG_RELEASE:= LUCI_TITLE:=LuCI support for SysTools diff --git a/applications/luci-app-systools/luasrc/controller/systools.lua b/applications/luci-app-systools/luasrc/controller/systools.lua index 96adccd2..d600593d 100755 --- a/applications/luci-app-systools/luasrc/controller/systools.lua +++ b/applications/luci-app-systools/luasrc/controller/systools.lua @@ -87,9 +87,11 @@ function main_container(data, extra) required = true, title = "可执行操作", type = "string", - enum = {"turn_off_ipv6", "reset_rom_pkgs", "qb_reset_password", "disk_power_mode", "speedtest", "openssl-aes256gcm", "openssl-chacha20-poly1305", "istore-reinstall", "disable-wandrop"}, + enum = {"turn_off_ipv6", "full_ipv6", "half_ipv6", "reset_rom_pkgs", "qb_reset_password", "disk_power_mode", "speedtest", "openssl-aes256gcm", "openssl-chacha20-poly1305", "istore-reinstall", "disable-wandrop"}, enumNames = { lng.translate("Turn off IPv6"), + lng.translate("Full IPv6"), + lng.translate("Half IPv6 (Only Router)"), lng.translate("Reset rom pkgs"), lng.translate("Reset qBittorrent Password"), lng.translate("HDD hibernation Status"), diff --git a/applications/luci-app-systools/po/zh-cn/systools.po b/applications/luci-app-systools/po/zh-cn/systools.po index ed8ec386..50b24fa5 100644 --- a/applications/luci-app-systools/po/zh-cn/systools.po +++ b/applications/luci-app-systools/po/zh-cn/systools.po @@ -13,6 +13,12 @@ msgstr "修复系统软件" msgid "Turn off IPv6" msgstr "关闭 IPv6" +msgid "Full IPv6" +msgstr "开启 IPv6" + +msgid "Half IPv6 (Only Router)" +msgstr "半 IPv6(仅路由器)" + msgid "Reset qBittorrent Password" msgstr "重置 qBittorrent 密码" diff --git a/applications/luci-app-systools/root/usr/libexec/istorec/systools.sh b/applications/luci-app-systools/root/usr/libexec/istorec/systools.sh index 415c697d..8b00a808 100755 --- a/applications/luci-app-systools/root/usr/libexec/istorec/systools.sh +++ b/applications/luci-app-systools/root/usr/libexec/istorec/systools.sh @@ -8,6 +8,8 @@ usage() { echo "usage: $0 sub-command" echo "where sub-command is one of:" echo " turn_off_ipv6 Disable IPv6" + echo " full_ipv6 Full IPv6" + echo " half_ipv6 Half IPv6 (Only Router)" echo " reset_rom_pkgs Reset pkgs from rom" echo " qb_reset_password Reset qBitorent password" echo " disk_power_mode Show disk power status" @@ -15,7 +17,9 @@ usage() { } case ${ACTION} in - "turn_off_ipv6") + "turn_off_ipv6"|\ + "full_ipv6"|\ + "half_ipv6") bash "/usr/share/systools/${ACTION}.run" ;; "reset_rom_pkgs") diff --git a/applications/luci-app-systools/root/usr/share/systools/full_ipv6.run b/applications/luci-app-systools/root/usr/share/systools/full_ipv6.run new file mode 100755 index 00000000..56807a7c --- /dev/null +++ b/applications/luci-app-systools/root/usr/share/systools/full_ipv6.run @@ -0,0 +1,75 @@ +#!/bin/sh + +ipv6_disable_lan_server() { + uci -q batch <<-EOF >/dev/null + del dhcp.lan.ra + del dhcp.lan.ra_slaac + del dhcp.lan.ra_flags + del dhcp.lan.dhcpv6 + del dhcp.lan.ndp +EOF +} + +ipv6_dns_on() { + uci -q delete 'dhcp.@dnsmasq[0].filter_aaaa' +} + +ipv6_relay_mode() { + uci -q batch <<-EOF >/dev/null + del network.wan6.auto + + set dhcp.wan6=dhcp + set dhcp.wan6.interface='wan6' + set dhcp.wan6.ignore='1' + set dhcp.wan6.master='1' + set dhcp.wan6.ra='relay' + set dhcp.wan6.dhcpv6='relay' + set dhcp.wan6.ndp='relay' + + set dhcp.lan.ra='relay' + del dhcp.lan.ra_slaac + del dhcp.lan.ra_flags + set dhcp.lan.dhcpv6='relay' + set dhcp.lan.ndp='relay' +EOF + ipv6_dns_on +} + +ipv6_pppoe_mode() { + ipv6_disable_lan_server + ipv6_dns_on +} + +is_lan_gateway() { + [ "$(uci -q get network.lan.defaultroute)" = "0" ] && return 1 + [ "$(uci -q get network.lan.proto)" = "dhcp" ] && return 0 + [ "$(uci -q get network.lan.proto)" = "static" ] || return 1 + [ -n "$(uci -q get network.lan.gateway)" ] +} + +is_wan_pppoe() { + [ "$(uci -q get network.wan.proto)" = "pppoe" ] +} + +if is_lan_gateway; then + echo "Single-Port Router (LAN Gateway) mode" + ipv6_pppoe_mode +elif is_wan_pppoe; then + echo "PPPoE mode" + ipv6_pppoe_mode + uci -q delete network.wan.ipv6 +else + echo "DHCP-Client mode" + ipv6_relay_mode +fi + +uci -q batch <<-EOF >/dev/null + commit dhcp + commit network +EOF + +/etc/init.d/odhcpd reload +/etc/init.d/dnsmasq reload +/etc/init.d/network reload + +echo "Done" diff --git a/applications/luci-app-systools/root/usr/share/systools/half_ipv6.run b/applications/luci-app-systools/root/usr/share/systools/half_ipv6.run new file mode 100755 index 00000000..e23a0912 --- /dev/null +++ b/applications/luci-app-systools/root/usr/share/systools/half_ipv6.run @@ -0,0 +1,34 @@ +#!/bin/sh + +ipv6_dns_on() { + uci -q delete 'dhcp.@dnsmasq[0].filter_aaaa' +} + +ipv6_half_mode() { + uci -q batch <<-EOF >/dev/null + del network.wan.ipv6 + del network.wan6.auto + + del dhcp.wan6 + + set dhcp.lan.ra='relay' + del dhcp.lan.ra_slaac + del dhcp.lan.ra_flags + set dhcp.lan.dhcpv6='relay' + set dhcp.lan.ndp='relay' +EOF + ipv6_dns_on +} + +ipv6_half_mode + +uci -q batch <<-EOF >/dev/null + commit dhcp + commit network +EOF + +/etc/init.d/odhcpd reload +/etc/init.d/dnsmasq reload +/etc/init.d/network reload + +echo "Done"