diff --git a/Makefile b/Makefile
index 3eab395..952adb6 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ LUCI_TITLE:=LuCI for Tailscale
LUCI_DEPENDS:=+tailscale
LUCI_PKGARCH:=all
-PKG_VERSION:=1.1.3
+PKG_VERSION:=1.2.0
include $(TOPDIR)/feeds/luci/luci.mk
diff --git a/htdocs/luci-static/resources/view/tailscale/setting.js b/htdocs/luci-static/resources/view/tailscale/setting.js
index ffac984..d4a55ad 100644
--- a/htdocs/luci-static/resources/view/tailscale/setting.js
+++ b/htdocs/luci-static/resources/view/tailscale/setting.js
@@ -23,7 +23,8 @@ function getStatus() {
isRunning: false,
backendState: undefined,
authURL: undefined,
- displayName: undefined
+ displayName: undefined,
+ routes: []
};
return Promise.resolve(callServiceList('tailscale')).then(res => {
try {
@@ -39,6 +40,8 @@ function getStatus() {
status.backendState = tailscaleStatus.BackendState;
status.authURL = tailscaleStatus.AuthURL;
status.displayName = (status.backendState === "Running") ? tailscaleStatus.User[tailscaleStatus.Self.UserID].DisplayName : undefined;
+ status.routes = Object.values(tailscaleStatus.Peer)
+ .flatMap(peer => peer.PrimaryRoutes || []);
return status;
});
}).catch(() => status);
@@ -74,13 +77,15 @@ function renderLogin(loginStatus, authURL, displayName) {
return view.extend({
load: function() {
return Promise.all([
- uci.load('tailscale')
+ uci.load('tailscale'),
+ getStatus()
]);
},
render: function(data) {
var m, s, o;
- var isRunning = data[1];
+ var statusData = data[1];
+ var routes = statusData.routes;
m = new form.Map('tailscale', _('Tailscale'), _('Tailscale is a cross-platform and easy to use virtual LAN.'));
@@ -172,6 +177,19 @@ return view.extend({
o.depends('acceptRoutes', '1');
o.rmempty = false;
+ o = s.taboption('advance', form.DynamicList, 'subnetRoutes', _('Subnet Routes'), _('Select subnet routes advertised by other nodes in Tailscale network.'));
+ if (routes.length > 0) {
+ routes.forEach(function(route) {
+ o.value(route, route);
+ });
+ } else {
+ o.value('', _('No Available Subnet Routes'));
+ o.readonly = true;
+ }
+ o.default = '';
+ o.depends('s2s', '1');
+ o.rmempty = true;
+
o = s.taboption('advance', form.MultiValue, 'access', _('Access Control'));
o.value('tsfwlan', _('Tailscale access LAN'));
o.value('tsfwwan', _('Tailscale access WAN'));
diff --git a/po/templates/tailscale.pot b/po/templates/tailscale.pot
index 0b5a8f9..c3ad304 100644
--- a/po/templates/tailscale.pot
+++ b/po/templates/tailscale.pot
@@ -1,84 +1,84 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
msgid "Accept DNS"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
msgid "Accept DNS configuration from the Tailscale admin console."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150
-msgid "Accept subnet routes that other nodes advertise."
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
-msgid "Access Control"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
-msgid "Additional Flags"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148
-msgid "Advanced Settings"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99
-msgid "Are you sure you want to logout and unbind the current device?"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
-msgid "Auth Key"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
msgid "Accept Routes"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
+msgid "Accept subnet routes that other nodes advertise."
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:193
+msgid "Access Control"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
+msgid "Additional Flags"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:153
+msgid "Advanced Settings"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104
+msgid "Are you sure you want to logout and unbind the current device?"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:215
+msgid "Auth Key"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
msgid "Available flags"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:118
msgid "Basic Settings"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:127
msgid "Collecting data ..."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:208
msgid "Custom Server Settings"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
msgid "Device Name"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:115
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:120
msgid "Enable"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
msgid "Exit Node"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
msgid "Expose Subnets"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
msgid "Expose physical network routes into Tailscale, e.g. 10.0.0.0/24."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:201
msgid "Extra Settings"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139
msgid "Firewall Mode"
msgstr ""
@@ -90,11 +90,11 @@ msgstr ""
msgid "Grant access to Tailscale configuration"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:86
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:93
msgid "IPv4 Address"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:90
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:97
msgid "IPv6 Address"
msgstr ""
@@ -102,35 +102,35 @@ msgstr ""
msgid "Interface Info"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:82
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:89
msgid "Interface Name"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
msgid "LAN access Tailscale"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
msgid "Leave blank to use the device's hostname."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
msgid "List of extra flags. Format: --flags=value, e.g. --exit-node=10.0.0.1.
%s for enabling settings upon the initiation of Tailscale."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
msgid "Logging program activities."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
msgid "Logging program errors and exceptions."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124
msgid "Login Status"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69
msgid "Logout and Unbind"
msgstr ""
@@ -138,120 +138,138 @@ msgstr ""
msgid "Logs"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:94
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:101
msgid "MTU"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:68
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:71
msgid "NOT RUNNING"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:63
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
msgid "Needs Login"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:80
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:87
msgid "Network Interface Information"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:76
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
+msgid "No Available Subnet Routes"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:83
msgid "No interface online."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:52
-msgid "No logs available"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
msgid "Port"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
msgid "RUNNING"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:69
+msgctxt "scroll to top (the head) of the log file"
+msgid "Scroll to head"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:60
+msgctxt "scroll to bottom (the tail) of the log file"
+msgid "Scroll to tail"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
+msgid "Select subnet routes advertised by other nodes in Tailscale network."
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:211
msgid "Server Address"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
msgid "Set the Tailscale port number."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
msgid "Site To Site"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
msgid "StdErr Log"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
msgid "StdOut Log"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
+msgid "Subnet Routes"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:120
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
#: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3
msgid "Tailscale"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194
msgid "Tailscale access LAN"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
msgid "Tailscale access WAN"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:121
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
msgid "Tailscale is a cross-platform and easy to use virtual LAN."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
msgid "The working directory contains config files, audit logs, and runtime info."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:69
-msgid "Toggle Log Order"
-msgstr ""
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:98
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:105
msgid "Total Download"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:102
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:109
msgid "Total Upload"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:31
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:33
msgid "Unable to get interface %s info: %s."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:16
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:18
msgid "Unable to get interface info: %s."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:36
+msgid "Unable to load log data:"
+msgstr ""
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:209
msgid "Use %s to deploy a private server."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:197
msgid "WAN access Tailscale"
msgstr ""
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
msgid "Workdir"
msgstr ""
diff --git a/po/zh_Hans/tailscale.po b/po/zh_Hans/tailscale.po
index e67983b..ed39b10 100644
--- a/po/zh_Hans/tailscale.po
+++ b/po/zh_Hans/tailscale.po
@@ -7,84 +7,84 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
msgid "Accept DNS"
msgstr "允许DNS"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
msgid "Accept DNS configuration from the Tailscale admin console."
msgstr "使用 Tailscale 管理控制台的 DNS 配置。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150
-msgid "Accept subnet routes that other nodes advertise."
-msgstr "接受其他节点广播的子网路由。"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
-msgid "Access Control"
-msgstr "访问控制"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
-msgid "Additional Flags"
-msgstr "参数列表"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148
-msgid "Advanced Settings"
-msgstr "高级设置"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99
-msgid "Are you sure you want to logout and unbind the current device?"
-msgstr "是否注销当前登录并且解绑当前设备?"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
-msgid "Auth Key"
-msgstr "认证密钥"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
msgid "Accept Routes"
msgstr "启用路由"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
+msgid "Accept subnet routes that other nodes advertise."
+msgstr "接受其他节点广播的子网路由。"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:193
+msgid "Access Control"
+msgstr "访问控制"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
+msgid "Additional Flags"
+msgstr "参数列表"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:153
+msgid "Advanced Settings"
+msgstr "高级设置"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104
+msgid "Are you sure you want to logout and unbind the current device?"
+msgstr "是否注销当前登录并且解绑当前设备?"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:215
+msgid "Auth Key"
+msgstr "认证密钥"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
msgid "Available flags"
msgstr "可用参数"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:118
msgid "Basic Settings"
msgstr "基础设置"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:127
msgid "Collecting data ..."
msgstr "正在收集数据..."
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:208
msgid "Custom Server Settings"
msgstr "自定义服务器"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
msgid "Device Name"
msgstr "设备名称"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:115
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:120
msgid "Enable"
msgstr "启用"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
msgid "Exit Node"
msgstr "出口节点"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
msgid "Expose Subnets"
msgstr "公开网段"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
msgid "Expose physical network routes into Tailscale, e.g. 10.0.0.0/24."
msgstr "广播子网路由至 Tailscale,例如:10.0.0.0/24。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:201
msgid "Extra Settings"
msgstr "附加设置"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139
msgid "Firewall Mode"
msgstr "防火墙模式"
@@ -96,11 +96,11 @@ msgstr "全局设置"
msgid "Grant access to Tailscale configuration"
msgstr "授予访问 Tailscale 配置的权限"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:86
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:93
msgid "IPv4 Address"
msgstr "IPv4地址"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:90
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:97
msgid "IPv6 Address"
msgstr "IPv6地址"
@@ -108,35 +108,35 @@ msgstr "IPv6地址"
msgid "Interface Info"
msgstr "接口信息"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:82
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:89
msgid "Interface Name"
msgstr "接口名称"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
msgid "LAN access Tailscale"
msgstr "本地局域网访问虚拟局域网"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
msgid "Leave blank to use the device's hostname."
msgstr "留空以使用设备的主机名。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
msgid "List of extra flags. Format: --flags=value, e.g. --exit-node=10.0.0.1.
%s for enabling settings upon the initiation of Tailscale."
msgstr "额外参数的列表。格式:--flags=value,例如 --exit-node=10.0.0.1。
在 Tailscale 启动时的%s。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
msgid "Logging program activities."
msgstr "记录程序运行信息。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
msgid "Logging program errors and exceptions."
msgstr "记录程序错误和警告信息。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124
msgid "Login Status"
msgstr "已绑定用户"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69
msgid "Logout and Unbind"
msgstr "注销登录并解除绑定"
@@ -144,120 +144,138 @@ msgstr "注销登录并解除绑定"
msgid "Logs"
msgstr "日志"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:94
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:101
msgid "MTU"
msgstr "MTU"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:68
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:71
msgid "NOT RUNNING"
msgstr "未运行"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:63
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
msgid "Needs Login"
msgstr "未登录"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:80
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:87
msgid "Network Interface Information"
msgstr "网络接口信息"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:76
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
+msgid "No Available Subnet Routes"
+msgstr "没有可用的子网路由"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:83
msgid "No interface online."
msgstr "无在线接口。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:52
-msgid "No logs available"
-msgstr "日志不存在"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network."
msgstr "作为 Tailscale 广域网出口节点。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
msgid "Port"
msgstr "端口"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
msgid "RUNNING"
msgstr "运行中"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:69
+msgctxt "scroll to top (the head) of the log file"
+msgid "Scroll to head"
+msgstr "滚动到顶部"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:60
+msgctxt "scroll to bottom (the tail) of the log file"
+msgid "Scroll to tail"
+msgstr "滚动到底部"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
+msgid "Select subnet routes advertised by other nodes in Tailscale network."
+msgstr "选择非本设备广播的子网路由。"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:211
msgid "Server Address"
msgstr "服务器地址"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
msgid "Set the Tailscale port number."
msgstr "设置 Tailscale 端口号。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
msgid "Site To Site"
msgstr "子网互通"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
msgid "StdErr Log"
msgstr "错误日志"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
msgid "StdOut Log"
msgstr "运行日志"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
+msgid "Subnet Routes"
+msgstr "子网路由"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:120
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
#: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3
msgid "Tailscale"
msgstr "Tailscale"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194
msgid "Tailscale access LAN"
msgstr "虚拟局域网访问本地局域网"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
msgid "Tailscale access WAN"
msgstr "虚拟局域网访问本地广域网"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:121
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
msgid "Tailscale is a cross-platform and easy to use virtual LAN."
msgstr "Tailscale 是一个跨平台且易于使用的虚拟局域网 VPN。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
msgid "The working directory contains config files, audit logs, and runtime info."
msgstr "工作目录包含配置文件、审计日志和运行时信息。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:69
-msgid "Toggle Log Order"
-msgstr "切换日志排序"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:98
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:105
msgid "Total Download"
msgstr "总下载量"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:102
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:109
msgid "Total Upload"
msgstr "总上传量"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:31
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:33
msgid "Unable to get interface %s info: %s."
msgstr "无法获取接口 %s 的信息:%s。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:16
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:18
msgid "Unable to get interface info: %s."
msgstr "无法获取接口信息:%s。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:36
+msgid "Unable to load log data:"
+msgstr "无法读取日志数据:"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:209
msgid "Use %s to deploy a private server."
msgstr "使用 %s 部署私有服务器"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
msgstr "使用站点到站点的三层网络连接 Tailscale 中的子网。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:197
msgid "WAN access Tailscale"
msgstr "本地广域网访问虚拟局域网"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
msgid "Workdir"
msgstr "工作目录"
diff --git a/po/zh_Hant/tailscale.po b/po/zh_Hant/tailscale.po
index dfb3e5e..f85b82d 100644
--- a/po/zh_Hant/tailscale.po
+++ b/po/zh_Hant/tailscale.po
@@ -7,84 +7,84 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
msgid "Accept DNS"
msgstr "允許DNS"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
msgid "Accept DNS configuration from the Tailscale admin console."
msgstr "使用 Tailscale 管理控制台的 DNS 設定。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150
-msgid "Accept subnet routes that other nodes advertise."
-msgstr "接受其他節點廣播的子網路由。"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
-msgid "Access Control"
-msgstr "訪問控制"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
-msgid "Additional Flags"
-msgstr "參數列表"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148
-msgid "Advanced Settings"
-msgstr "高級設置"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99
-msgid "Are you sure you want to logout and unbind the current device?"
-msgstr "是否註銷當前登錄並且解綁當前設備?"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
-msgid "Auth Key"
-msgstr "認證密鑰"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
msgid "Accept Routes"
msgstr "啟用路由"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
+msgid "Accept subnet routes that other nodes advertise."
+msgstr "接受其他節點廣播的子網路由。"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:193
+msgid "Access Control"
+msgstr "訪問控制"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
+msgid "Additional Flags"
+msgstr "參數列表"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:153
+msgid "Advanced Settings"
+msgstr "高級設置"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104
+msgid "Are you sure you want to logout and unbind the current device?"
+msgstr "是否註銷當前登錄並且解綁當前設備?"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:215
+msgid "Auth Key"
+msgstr "認證密鑰"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
msgid "Available flags"
msgstr "可用參數"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:118
msgid "Basic Settings"
msgstr "基礎設置"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:127
msgid "Collecting data ..."
msgstr "正在收集數據..."
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:208
msgid "Custom Server Settings"
msgstr "自定義伺服器"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
msgid "Device Name"
msgstr "設備名稱"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:115
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:120
msgid "Enable"
msgstr "啟用"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
msgid "Exit Node"
msgstr "出口節點"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
msgid "Expose Subnets"
msgstr "公開網段"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
msgid "Expose physical network routes into Tailscale, e.g. 10.0.0.0/24."
msgstr "廣播子網路由至 Tailscale,例如:10.0.0.0/24。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:201
msgid "Extra Settings"
msgstr "附加設置"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139
msgid "Firewall Mode"
msgstr "防火牆模式"
@@ -96,11 +96,11 @@ msgstr "全局設置"
msgid "Grant access to Tailscale configuration"
msgstr "授予訪問 Tailscale 配置的權限"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:86
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:93
msgid "IPv4 Address"
msgstr "IPv4地址"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:90
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:97
msgid "IPv6 Address"
msgstr "IPv6地址"
@@ -108,35 +108,35 @@ msgstr "IPv6地址"
msgid "Interface Info"
msgstr "接口信息"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:82
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:89
msgid "Interface Name"
msgstr "接口名稱"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
msgid "LAN access Tailscale"
msgstr "本地局域網訪問虛擬局域網"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
msgid "Leave blank to use the device's hostname."
msgstr "留空以使用設備的主機名。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
msgid "List of extra flags. Format: --flags=value, e.g. --exit-node=10.0.0.1.
%s for enabling settings upon the initiation of Tailscale."
msgstr "額外參數的列表。格式:--flags=value,例如 --exit-node=10.0.0.1。
在 Tailscale 啟動時的%s。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
msgid "Logging program activities."
msgstr "記錄程式運行信息。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
msgid "Logging program errors and exceptions."
msgstr "記錄程式錯誤和警告信息。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124
msgid "Login Status"
msgstr "已綁定用戶"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69
msgid "Logout and Unbind"
msgstr "註銷登錄並解除綁定"
@@ -144,120 +144,138 @@ msgstr "註銷登錄並解除綁定"
msgid "Logs"
msgstr "日誌"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:94
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:101
msgid "MTU"
msgstr "MTU"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:68
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:71
msgid "NOT RUNNING"
msgstr "未運行"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:63
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
msgid "Needs Login"
msgstr "未登錄"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:80
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:87
msgid "Network Interface Information"
msgstr "網絡接口信息"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:76
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
+msgid "No Available Subnet Routes"
+msgstr "沒有可用的子網路由"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:83
msgid "No interface online."
msgstr "無在線接口。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:52
-msgid "No logs available"
-msgstr "日誌不存在"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network."
msgstr "作為 Tailscale 廣域網出口節點。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
msgid "Port"
msgstr "端口"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
msgid "RUNNING"
msgstr "運行中"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:69
+msgctxt "scroll to top (the head) of the log file"
+msgid "Scroll to head"
+msgstr "捲動到頂部"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:60
+msgctxt "scroll to bottom (the tail) of the log file"
+msgid "Scroll to tail"
+msgstr "捲動到尾部"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
+msgid "Select subnet routes advertised by other nodes in Tailscale network."
+msgstr "選擇非本設備廣播的子網路由。"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:211
msgid "Server Address"
msgstr "伺服器地址"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
msgid "Set the Tailscale port number."
msgstr "設置 Tailscale 端口號。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
msgid "Site To Site"
msgstr "子網互通"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
msgid "StdErr Log"
msgstr "錯誤日誌"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
msgid "StdOut Log"
msgstr "運行日誌"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
+msgid "Subnet Routes"
+msgstr "子網路由"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:120
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
#: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3
msgid "Tailscale"
msgstr "Tailscale"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194
msgid "Tailscale access LAN"
msgstr "虛擬局域網訪問本地局域網"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
msgid "Tailscale access WAN"
msgstr "虛擬局域網訪問本地廣域網"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:121
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
msgid "Tailscale is a cross-platform and easy to use virtual LAN."
msgstr "Tailscale 是一個跨平台且易於使用的虛擬局域網 VPN。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
msgid "The working directory contains config files, audit logs, and runtime info."
msgstr "工作目錄包含配置文件、審計日誌和運行時信息。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:69
-msgid "Toggle Log Order"
-msgstr "切換日誌排序"
-
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:98
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:105
msgid "Total Download"
msgstr "總下載量"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:102
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:109
msgid "Total Upload"
msgstr "總上傳量"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:31
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:33
msgid "Unable to get interface %s info: %s."
msgstr "無法獲取接口 %s 的信息:%s。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:16
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:18
msgid "Unable to get interface info: %s."
msgstr "無法獲取接口信息:%s。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/log.js:36
+msgid "Unable to load log data:"
+msgstr "無法載入日誌檔:"
+
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:209
msgid "Use %s to deploy a private server."
msgstr "使用 %s 部署私有伺服器"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
msgstr "使用站點到站點的三層網路連線 Tailscale 中的子網。"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:197
msgid "WAN access Tailscale"
msgstr "本地廣域網訪問虛擬局域網"
-#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
+#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
msgid "Workdir"
msgstr "工作目錄"
diff --git a/root/etc/init.d/tailscale b/root/etc/init.d/tailscale
index 500cc1f..34ffe59 100755
--- a/root/etc/init.d/tailscale
+++ b/root/etc/init.d/tailscale
@@ -86,6 +86,23 @@ custom_instance() {
fi
fi
+ config_get subnetRoutes $cfg 'subnetRoutes'
+ if [ -n "$subnetRoutes" ]; then
+ i=1
+ lan_ip=$(uci get network.lan.ipaddr)
+ for route in $subnetRoutes; do
+ uci set network.ts_subnet$i='route'
+ uci set network.ts_subnet$i.interface='lan'
+ uci set network.ts_subnet$i.target=$route
+ uci set network.ts_subnet$i.gateway=$lan_ip
+ let i++
+ done
+ else
+ for route in $(uci show network | grep 'network\.ts_subnet[0-9]*\+=route' | grep -o 'network\.ts_subnet[0-9]*'); do
+ uci -q delete $route
+ done
+ fi
+
config_get access $cfg 'access'
if [ -n "$access" ]; then
if [ -z "$(uci -q get firewall.tszone)" ]; then
@@ -184,6 +201,9 @@ stop_instance() {
# Remove network settings
uci -q delete network.tailscale
uci -q delete network.ts_lan
+ for route in $(uci show network | grep 'network\.ts_subnet[0-9]*\+=route' | grep -o 'network\.ts_subnet[0-9]*'); do
+ uci -q delete $route
+ done
# Remove firewall settings
uci -q delete firewall.tszone