From 5e6e31e5c77f969db3990ed0246d59b22e2445c4 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 18 May 2018 09:40:50 +0200 Subject: [PATCH 001/307] Add IPv6 check and fixes --- luci-app-openmptcprouter/Makefile | 2 +- .../htdocs/luci-static/resources/spinner.gif | Bin 0 -> 5532 bytes .../luasrc/controller/openmptcprouter.lua | 135 +++++++++++++++--- .../luasrc/view/openmptcprouter/wanstatus.htm | 14 +- ndisc6/Makefile | 99 +++++++++++++ 5 files changed, 224 insertions(+), 26 deletions(-) create mode 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif create mode 100644 ndisc6/Makefile diff --git a/luci-app-openmptcprouter/Makefile b/luci-app-openmptcprouter/Makefile index 87df2cb3e..bde3eb374 100644 --- a/luci-app-openmptcprouter/Makefile +++ b/luci-app-openmptcprouter/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Support for OpenMPTCProuter -LUCI_DEPENDS:=+luci-lib-json +LUCI_DEPENDS:=+luci-lib-json +rdisc6 PKG_LICENSE:=GPLv3 include ../luci/luci.mk diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif b/luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..286e1bcd38e331c240b162f6727277f776d80c4b GIT binary patch literal 5532 zcma)=`#;l-`^VoqV1^l1kwcq9Ij13J>b5y8V~sfs5jjPL*c>_zBRQ;zl(KRRCFkT= zj54Pc%Au@=N=hs$>b~#pZ=dhu`|IcP{ak;*_0#iuy`GQD`GAu(E*K4t7L_eqQCn5F zY*XE;sQezHrc($)C{|OkGUDve2=*W)?%-@rIp2AYfCHKUTd5c z&c@mXkHhb?vE7f~_lNC%yM2Gy?YATRK_J=@>UPkbLiIT4PNRBwy3;&8JiTaM-k#n*Ufy&sA75`@f4bixU;hBV zLxKJQhYtk?1so0z3_5Z+I3(yuXmCi_kPcPQ)CKjy(}`GWukEY#ifcJTs1w5YJ3xBqT8tlM|9oB_^LvI&~)b^x0Eq&YeDc z{>(Yn+4CvqSgGez(pahNl(h6zc1BwI1$IVe`h|-bnOPSuW@l#QT+GhR%Hd?^UdrKc zb1&s_xR)>G<#R6=Tp3if@+iZk66F zDZ5o#UQ$+3T3%UJal5>-s^WHaWmV1X>N{06cdPHz*4({!r?&3yz53d^hIGgzpuM%N<3W38TSr%WXLm=}!_MwUT@QP^d-xA~`yTQ8d;1>q z`=9hZ9_W7}cswxpL@+ckI4l?%85|Z4jXoU~J{x&DCVV#jbZp|;`17%e7vs+-CtgfF zpPYU%{c>{V)zr(`nOCBhv#(!?-psxhi{8w=7SF$#dn;aeH~04a!n?({??1d-TzdcE zzDO!YhO3kzi)os`0;)7=f;meH-G;1 zr4RHFW{Z5 z2C1Q>Hw~u1_ZKu^`q(f{m*cQ8F+Ndw>}-ftV_8?CnETE}dWC13v>f__Abk++n7Mir zWD~cLSrWeTwv^Vt@WTFrQs>wpQ1U_AMl{>*KY8cX!I%kQk*#3mN^TiFxFON=T@w_2Iu#J#)y$q^<* z`%dytE*IlB=8NTLdJTyf!qVZ@<8NC3&MVR*zi{O@d*3zztcq#B$jja`5E=WVH<)#$ z_M?hb<9PFmy_HARs#Y&+emMvI^|bIwuf0&mY7>A*N!U6tX}VVf3~%ZtBMy^GS8+8< z;=M(fhjsOUK|4p%0?E;9M<rlo zKhMrR*kQrfUR0207iu}OhQRaDsRR0wE9){)sIFPYdDD(&4JoDSX9Je%6c7PyKu_Hk zLYp;{GU@|WU&S?S5-#XXwDoO+(cQj`5I@_}vavQFY}s2~UNdxF1o9YEPw*Wq!<|7j zWY741Jm6BJ_m-qu+o0T-Pu_7NXtAtTi}{3N{d)HL)hdV-^xwl28-$M;D?1zS(@<)E z;eFCv3Rv&b?s!G>t?U8QDHI$4sMq+}yeB!5x4oYVWgsj7vq!v?&?N4R9pN%VrjEOS zu32qoona{@8W%&1rVFlOAiAo4o|X5lOhF{pk&l!~?w0VO(^L1<`z|c|^}^sl zAKHhChQb=qaMS$PYvRW5$UqwkW*W?zaGSoVLX z!0Rl~;Ne29Heqa&o=>x&z#ObTu_{C^$K=mBJmb+v4FeD9t?lEty})ni6t%jbQSOqf z&o@jvjdseeu|*{zK4}%!+8L%xAgPuMe|b9&3@bM=!A~uJUI&Ej@7F5aWZg4vcg5#S zch+b9?W>B6k?0-7x1#1mATzG^>jPD#<=M#T2B=Y)w7B z+OUAYzbkG=pHc5sp%`b{rpm|f;;k#>B2Kci6xA3=={-iuP(|y)9wj)gl}VF^Vwe(` zlVW?h3tV=VO3pOwrn#vSf@5KqL+&+G5)9i_hNOYo9(a*@ULQ$T%1#V1-g!UYbr(-J zJ6x@K<-PuFrbs`It(3)3G0Ip?(#bI^XgX?mr*aa7{P(;x{Eiw4 z-0+Zqdb2Z{&%l{aHI(rahSxUR_DB^xU~k=)%67g-kp=)|i9S;}hl~60+SfM1Wad6& zIsA)0OPR&SO$nr$`$?!~rotf4P^B{GZgi#hS9va4zRBIgB{s?Z$yJ+lN!(8o7tL3q zw`Kt_Bw#0nzm=o=!M9Z2f(w~Tm(wj>ly(#XO#11POar1iwN>hwy?1A-NUxbAB%UwEj$H0L2t0z{)n8!$7eRkzoB64rvo27!H z`R7^J@#*il%=wBO&9y8^S3bh#7jJ-K;?4&6s4hXMdz_>#Ug!f!hrp!t-FswgFiKyA z=G<$_!UR#*9v_#miix>|)wf_N>Z{U_K{yNzr0I3vgI%&}f~HZ3kC@E@6pemlH0zbY zhC1OhYhB*_bys{K=^s7WxdPJrFg@FM>~(tKmi9Dx?NcK}CDt2s{^(f+Hx+3qiyM6i#@qzs7gfkqxdh$cJ*W#~s%)+Vkdh_ix%L|fEgKJAaIq^gL+v+yr*L?g`Z@fu3hCsyC#Jj_ zbY$x%=wxpXPd(?!~uB)wMp^l@0=sCH*cw+X6eIM>;Ay&*q7+jxXA4_Q# zjJaM^u%z{ang(}*wC<)XWTCU6eTPVQi^?-k+7M#*EYh-3A>t=!L=#h~_^HqJ-hN@^<#8B_>HL$q9@w8_u#FZ$QWxWJvSLhrP?9LuZ6 z{HFqIKzIFLAO*FD_ZAl&Be`R`;_vZM1`}C_9$#9UHMju=0cP2k}jS6b@e>8k2PR z+JMVRm>2R!ojTdC(4El_J?|64b7x(%?-}?dOnvsk>?`E{s?^!66EV40Ca$FNQ-~L_ zg1TFB;RjxLb1kaelCS6YmBe87(4=K8lZaE!5=j|9nCga6Aa`#{)X?G*8AUU*q(T}v z*uj3nJaIO*-|&N2=BZ^cDOOcBb5>drKmKfuY&~iTJ!n&Zw2=t2oGl$;8aFOb!qDw1 z9P_RM@I{>p>pq10OiBR)o5cn>sudd3gfZoq=g;t?0(T+>x!E&lWeI=Iv3M91uSJlQ zgbd0_X(T9P_nGL9YV1QdO%vxNrP^th)t7e_OVBz}(qXnom8?%yS7QLH+PI_9y~*<# zM)nFV!ovN&O~i-k@jPJ~$BcL(FAdBa^W}Ad zUEQDPi;{{o-0nRb$_e|N)aQzQ!7VpFXVDmsh_}#W`(A(PIAfAGUD!#r`wva`FU?kg zA5Wx+@aaf7zRu#^3B#ym?I=doF&DU2R$cEzHS#r%qygw=DvyZl5>0hFLN=&k92xCN zA-r!2usqz;@z{3Lbk@{UI60U$K$*V2-PxF#KZWqUq2>6OwYncy)7ZdLVtX27=!{`?Dv|(g?ojN{0%L`eYDLEW3ptc_gulpW4^zg)=Cl)z# z?NhpLx1uv#3hHBTimt2|n*Q)e=<2T}DOncVC5o(n{iyM>`C*Aq@**zXw-A}=qd(Be z2t~C5eg-W^c@yDVq|HrIDUKAf^XvcsNwqgRTbZ9@I{Cap$yOZ8w}&DN>@HYuT;^JjAlIXHk(}6`$y2;8% z#xA$T^<9P$(K6<3svgo>cNq}61Htu$hXV*e!&uO>j5LbX1cN5L+wgG0Rej5II16OS zjpJOfzs&GAp~Z3ms3ou#8if1K{_OVu&(v>w;s!j36wmG{)?ei{5yFg_ zY0ke>i%}RvWsQ@M46xB;T}j@sZdcs%J4FlEB$ci48gt$D2@yl(xohI&W{cY+2C){3 z8TO9{w%}4E&%9`pxtaqB9UQxAGdI5^)duYLO%{&Utq3kh_wP^S8}$I|)JhOX`(O5ian?2F-l zz0$WA1e(iF2~1e<6G^`=oOQ1A@5qi+@RZ;Er;7@3y zy@E+;MQV<| zK?{BBYQ;^GVL?xj)_w60G#WzyP-w}3A?-NV4r~N~bMy=Vw4QXlYg!TI>GMVq$fGWF z5RG1j*(p{Eu#Qr)c0CY%_0&RyX>cuz0CTcU9adLT^-I;8ti?+Iwl-pJge%{kVph1B zCopu{^CK^%)T|&CffFpJx@MNCO;KJD5aLWZr$mv(9X74a=`yrU{M3{%$4mf1rZ1}lgQ6IP1%dJ2o&kHh2fcP@-8r& zNwF+D(R8*wQC>tiBwK$&4}Wjy-m06XK>zLK`R6dd)C^ zm^5eXXi%wAGf__(kuS3T7 z-*&e&-5$TOQ9?^teu*>LtkY=ry~FSd8ITxFr@oJVY`}-Oltv`$br?BEizb4OU;%(z z!qzTPm@BmpKQLw-BYEiSvZpgCFQ~@ZCYx54hVosi8>=zH_bhK|;ux~05LYkF=x+a& z{%LEb{kIv*<0r$X5i=-R*(e4!5#gl-odntGr*$-U#+0x@kI};|3qp$vvn&u4t_|ge8DRQcHt|YzYz@j}uM;k_Nbqk;3mE!%652L2c-$GtG)g z;_d+S=<}miqiB^;+<~z*(eZt4sbK_5r6vL}sRTguN6!$YQHMnJmAFsk+sl6 zk_w$+C1n)QbG4N{4}k*5kr}%eN$WE5>OEZN^GTBqE~<_iAZKGw!3aUbEM(_%u!V1f zWwFtqomZ^{0*_&=*kZy7`nVD}V4Zi$K9}R8C#4p$wkBwOW}{FZk7{{RH4azy|D literal 0 HcmV?d00001 diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 5e451e864..c538b7941 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -170,7 +170,11 @@ function get_ip(interface) return ip end --- This function come from OverTheBox by OVH with very small changes +-- This function come from OverTheBox by OVH with some changes +-- Copyright 2015 OVH +-- Simon Lelievre (simon.lelievre@corp.ovh.com) +-- Sebastien Duponcheel +-- Under GPL3+ function interfaces_status() local ut = require "luci.util" local ntm = require "luci.model.network".init() @@ -192,7 +196,7 @@ function interfaces_status() -- dns mArray.openmptcprouter["dns"] = false - local dns_test = sys.exec("dig openmptcprouter.com | grep 'ANWER: 0'") + local dns_test = sys.exec("dig openmptcprouter.com | grep 'ANSWER: 0'") if dns_test == "" then mArray.openmptcprouter["dns"] = true end @@ -289,20 +293,43 @@ function interfaces_status() local connectivity local multipath_state = ut.trim(sys.exec("multipath " .. ifname .. " | grep deactivated")) if multipath_state == "" and ifname ~= "" then - connectivity = 'OK' + connectivity = 'OK' else + connectivity = 'ERROR' + end + + if ipaddr == "" then connectivity = 'ERROR' end - local gw_ping + -- Detect WAN gateway status + local gw_ping = 'UP' if gateway ~= "" then local gw_ping_test = ut.trim(sys.exec("ping -W 1 -c 1 " .. gateway .. " | grep '100% packet loss'")) - if gw_ping_test == "" then - gw_ping = 'UP' - else + if gw_ping_test ~= "" then gw_ping = 'DOWN' if connectivity == "OK" then - connectivity = 'WARNING' + connectivity = 'WARNING' + end + end + end + + -- Detect if WAN get an IPv6 + local ipv6_discover = 'NONE' + if tonumber((sys.exec("sysctl net.ipv6.conf.all.disable_ipv6")):match(" %d+")) == 0 then + local ipv6_result = _ipv6_discover(ifname) + if type(ipv6_result) == "table" and #ipv6_result > 0 then + local ipv6_addr_test + for k,v in ipairs(ipv6_result) do + if v.RecursiveDnsServer then + ipv6_addr_test = sys.exec('ip -6 addr | grep ' .. v.RecursiveDnsServer) + end + end + if ipv6_addr_test == "" then + ipv6_discover = 'DETECTED' + if connectivity == "OK" then + connectivity = 'WARNING' + end end end end @@ -313,20 +340,21 @@ function interfaces_status() local data = { label = section['label'] or interface, - name = interface, - link = net:adminlink(), - ifname = ifname, - ipaddr = ipaddr, - gateway = gateway, - multipath = section['multipath'], - status = connectivity, - wanip = publicIP, - latency = latency, - whois = asn and asn.as_description or "unknown", - qos = section['trafficcontrol'], - download = section['download'], - upload = section['upload'], - gw_ping = gw_ping, + name = interface, + link = net:adminlink(), + ifname = ifname, + ipaddr = ipaddr, + gateway = gateway, + multipath = section['multipath'], + status = connectivity, + wanip = publicIP, + latency = latency, + whois = asn and asn.as_description or "unknown", + qos = section['trafficcontrol'], + download = section['download'], + upload = section['upload'], + gw_ping = gw_ping, + ipv6_discover = ipv6_discover, } if ifname:match("^tun.*") then @@ -338,4 +366,65 @@ function interfaces_status() luci.http.prepare_content("application/json") luci.http.write_json(mArray) -end \ No newline at end of file +end + +-- This come from OverTheBox by OVH +-- Copyright 2015 OVH +-- Simon Lelievre (simon.lelievre@corp.ovh.com) +-- Sebastien Duponcheel +-- Under GPL3+ +function _ipv6_discover(interface) + local result = {} + + --local ra6_list = (sys.exec("rdisc6 -nm " .. interface)) + local ra6_list = (sys.exec("rdisc6 -n1 " .. interface)) + -- dissect results + local lines = {} + local index = {} + ra6_list:gsub('[^\r\n]+', function(c) + table.insert(lines, c) + if c:match("Hop limit") then + table.insert(index, #lines) + end + end) + local ra6_result = {} + for k,v in ipairs(index) do + local istart = v + local iend = index[k+1] or #lines + + local entry = {} + for i=istart,iend - 1 do + local level = lines[i]:find('%w') + local line = lines[i]:sub(level) + + local param, value + if line:match('^from') then + param, value = line:match('(from)%s+(.*)$') + else + param, value = line:match('([^:]+):(.*)$') + -- Capitalize param name and remove spaces + param = param:gsub("(%a)([%w_']*)", function(first, rest) return first:upper()..rest:lower() end):gsub("[%s-]",'') + param = param:gsub("%.$", '') + -- Remove text between brackets, seconds and spaces + value = value:lower() + value = value:gsub("%(.*%)", '') + value = value:gsub("%s-seconds%s-", '') + value = value:gsub("^%s+", '') + value = value:gsub("%s+$", '') + end + + if entry[param] == nil then + entry[param] = value + elseif type(entry[param]) == "table" then + table.insert(entry[param], value) + else + old = entry[param] + entry[param] = {} + table.insert(entry[param], old) + table.insert(entry[param], value) + end + end + table.insert(ra6_result, entry) + end + return ra6_result +end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 9caa00580..b3a067123 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -22,13 +22,14 @@ -- Copyright 2018 Ycarus (Yannick Chabanois) ycarus@zugaina.org -- -- Small changes to make this work with OpenMPTCProuter +-- New features: DNS detection, IPv6 route received,... -%> <%+header%> + +<%- end) %> diff --git a/luci-base/luasrc/view/cbi/apply_xhr.htm b/luci-base/luasrc/view/cbi/apply_xhr.htm deleted file mode 100644 index daa57c1db..000000000 --- a/luci-base/luasrc/view/cbi/apply_xhr.htm +++ /dev/null @@ -1,43 +0,0 @@ -<% export("cbi_apply_xhr", function(id, configs, redirect) -%> -
- <%:Applying changes%> - - - <%:Loading%> - <%:Waiting for changes to be applied...%> -
-<%- end) %> diff --git a/luci-base/luasrc/view/cbi/map.htm b/luci-base/luasrc/view/cbi/map.htm index e3210add6..69ef3615a 100644 --- a/luci-base/luasrc/view/cbi/map.htm +++ b/luci-base/luasrc/view/cbi/map.htm @@ -2,12 +2,23 @@
<%=pcdata(msg)%>
<%- end end -%> -<%-+cbi/apply_xhr-%> -
<% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> - <%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%> + <%- if firstmap and (applymap or confirmmap) then -%> + <%+cbi/apply_widget%> + <% cbi_apply_widget(redirect) %> + + + <%- end -%> <% if self.tabbed then %>
+ <% if reset_avail then %> +
<%:Custom files (certificates, scripts) may remain on the system. To prevent this, perform a factory-reset first.%>
+ <% end %>
diff --git a/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index d5d78289b..88e0fffd9 100644 --- a/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -69,7 +69,7 @@ end <% if querypat then %>
<%:Displaying only packages containing%> "<%=pcdata(query)%>" - +
<% end %> diff --git a/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm deleted file mode 100644 index 370027e51..000000000 --- a/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm +++ /dev/null @@ -1,23 +0,0 @@ -<%# - Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<%+header%> - -

<%:Configuration%> / <%:Apply%>

- -<% if changes then %> - <%+cbi/apply_xhr%> - <%+admin_uci/changelog%> - - <%- cbi_apply_xhr('uci-apply', configs) -%> - -

<%:The following changes have been committed%>:

- <%- uci_changelog(changes) -%> -<% else %> -

<%:There are no pending changes to apply!%>

-<% end %> - -<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index c3373604f..9e9ce2be2 100644 --- a/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -1,40 +1,41 @@ <%# Copyright 2008 Steven Barth - Copyright 2008-2015 Jo-Philipp Wich + Copyright 2008-2018 Jo-Philipp Wich Licensed to the public under the Apache License 2.0. -%> <%+header%> +<%- + local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir")) + + include("cbi/apply_widget") + include("admin_uci/changelog") + + cbi_apply_widget(redir_url or url("admin/uci/changes")) +-%> +

<%:Configuration%> / <%:Changes%>

<% if changes then %> - <%+admin_uci/changelog%> <%- uci_changelog(changes) -%> <% else %>

<%:There are no pending changes!%>

<% end %> + +
- <% local r = luci.http.formvalue("redir"); if r and #r > 0 then %> + <% if redir_url then %>
-
+
<% end %>
-
- - " /> - -
-
- - " /> - -
+
" /> diff --git a/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm index 5da7281a8..dff53420a 100644 --- a/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm +++ b/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -1,27 +1,42 @@ <%# Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich + Copyright 2008-2018 Jo-Philipp Wich Licensed to the public under the Apache License 2.0. -%> <%+header%> +<%- + local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir")) + + include("cbi/apply_widget") + include("admin_uci/changelog") + + cbi_apply_widget(redir_url or url("admin/uci/revert")) +-%> +

<%:Configuration%> / <%:Revert%>

<% if changes then %> - <%+cbi/apply_xhr%> - <%+admin_uci/changelog%> -

<%:The following changes have been reverted%>:

<%- uci_changelog(changes) -%> <% else %>

<%:There are no pending changes to revert!%>

<% end %> -
- "> - - -
+ + + +<% if redir_url then %> +
+
+ +
+
+<% end %> <%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm b/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm index 2fb64b3c4..ebb02e489 100644 --- a/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm +++ b/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm @@ -1,9 +1,9 @@ <%+cbi/valueheader%> - - - - - - -
+
+
+
+

? -
+ +
<%:Collecting data...%> -
+
+
+ <%+cbi/valuefooter%> diff --git a/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm index 28a37dcd9..9005279a4 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -20,10 +20,10 @@ if (st && st[0] && tb) { /* clear all rows */ - while( tb.rows.length > 1 ) - tb.deleteRow(1); + while (tb.firstElementChild !== tb.lastElementChild) + tb.removeChild(tb.lastElementChild); - for( var i = 0; i < st[0].length; i++ ) + for (var i = 0; i < st[0].length; i++) { var timestr; @@ -34,24 +34,16 @@ else timestr = String.format('%t', st[0][i].expires); - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - tr.insertCell(-1).innerHTML = st[0][i].hostname ? st[0][i].hostname : '?'; - tr.insertCell(-1).innerHTML = st[0][i].ipaddr; - tr.insertCell(-1).innerHTML = st[0][i].macaddr; - tr.insertCell(-1).innerHTML = timestr; + tb.appendChild(E('
'.format((i % 2) + 1), [ + E('
', st[0][i].hostname || '?'), + E('
', st[0][i].ipaddr), + E('
', st[0][i].macaddr), + E('
', timestr) + ])); } - if( tb.rows.length == 1 ) - { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '
<%:There are no active leases.%>
'; - } + if (tb.firstElementChild === tb.lastElementChild) + tb.appendChild(E('

<%:There are no active leases.%>
')); } var tb6 = document.getElementById('lease6_status_table'); @@ -60,10 +52,10 @@ tb6.parentNode.style.display = 'block'; /* clear all rows */ - while( tb6.rows.length > 1 ) - tb6.deleteRow(1); + while (tb6.firstElementChild !== tb6.lastElementChild) + tb6.removeChild(tb6.lastElementChild); - for( var i = 0; i < st[1].length; i++ ) + for (var i = 0; i < st[1].length; i++) { var timestr; @@ -74,35 +66,29 @@ else timestr = String.format('%t', st[1][i].expires); - var tr = tb6.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); + var host = hosts[duid2mac(st[1][i].duid)], + name = st[1][i].hostname, + hint = null; - var host = hosts[duid2mac(st[1][i].duid)]; - if (!st[1][i].hostname) - tr.insertCell(-1).innerHTML = - (host && (host.name || host.ipv4 || host.ipv6)) - ? '
? (%h)
'.format(host.name || host.ipv4 || host.ipv6) - : '?'; - else - tr.insertCell(-1).innerHTML = - (host && host.name && st[1][i].hostname != host.name) - ? '
%h (%h)
'.format(st[1][i].hostname, host.name) - : st[1][i].hostname; + if (!name) { + if (host) + hint = host.name || host.ipv4 || host.ipv6; + } + else { + if (host && host.name && st[1][i].hostname != host.name) + hint = host.name; + } - tr.insertCell(-1).innerHTML = st[1][i].ip6addr; - tr.insertCell(-1).innerHTML = st[1][i].duid; - tr.insertCell(-1).innerHTML = timestr; + tb6.appendChild(E('
'.format((i % 2) + 1), [ + E('
', hint ? '
%h (%h)
'.format(name || '?', hint) : (name || '?')), + E('
', st[1][i].ip6addr), + E('
', st[1][i].duid), + E('
', timestr) + ])); } - if( tb6.rows.length == 1 ) - { - var tr = tb6.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '
<%:There are no active leases.%>
'; - } + if (tb6.firstElementChild === tb6.lastElementChild) + tb6.appendChild(E('

<%:There are no active leases.%>
')); } } ); @@ -110,30 +96,30 @@
<%:Active DHCP Leases%> - - - - - - - - - - -
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Leasetime remaining%>

<%:Collecting data...%>
+
+
+
<%:Hostname%>
+
<%:IPv4-Address%>
+
<%:MAC-Address%>
+
<%:Leasetime remaining%>
+
+
+

<%:Collecting data...%>
+
+
diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index 3533c6fa4..e9cfb3e85 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -91,24 +91,24 @@
- +
<% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %> -
- - - - + + <% end %> -
+
+

<%=percent_wifi_signal(net)%>%
-
+ +
<%=net.ssid and utl.pcdata(net.ssid) or "%s" % translate("hidden")%>
Channel: <%=net.channel%> | Mode: <%=net.mode%> | BSSID: <%=net.bssid%> | Encryption: <%=format_wifi_encryption(net.encryption)%> -
+ +
@@ -128,11 +128,11 @@
-
+
diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index 4465095ff..31f1fed81 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -195,8 +195,8 @@ { var assoctable = document.getElementById('iw-assoclist'); if (assoctable) - while (assoctable.rows.length > 1) - assoctable.rows[1].parentNode.removeChild(assoctable.rows[1]); + while (assoctable.firstElementChild !== assoctable.lastElementChild) + assoctable.removeChild(assoctable.lastElementChild); var devup = { }; var rowstyle = 1; @@ -293,7 +293,7 @@ if (assoctable) { var assoclist = [ ]; - for( var bssid in iw.assoclist ) + for (var bssid in iw.assoclist) { assoclist.push(iw.assoclist[bssid]); assoclist[assoclist.length-1].bssid = bssid; @@ -301,11 +301,8 @@ assoclist.sort(function(a, b) { a.bssid < b.bssid }); - for( var j = 0; j < assoclist.length; j++ ) + for (var j = 0; j < assoclist.length; j++) { - var tr = assoctable.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + rowstyle; - var icon; var q = (-1 * (assoclist[j].noise - assoclist[j].signal)) / 5; if (q < 1) @@ -319,48 +316,35 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - tr.insertCell(-1).innerHTML = String.format( - ' %h', - iw.device.name, iw.ifname - ); + var host = hosts[assoclist[j].bssid], + name = host ? (host.name || host.ipv4 || host.ipv6) : null, + hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; - tr.insertCell(-1).innerHTML = nowrap(String.format('%h', iw.ssid ? iw.ssid : '?')); - tr.insertCell(-1).innerHTML = assoclist[j].bssid; - - var host = hosts[assoclist[j].bssid]; - if (host) - tr.insertCell(-1).innerHTML = String.format( - '
%s
', - ((host.name && (host.ipv4 || host.ipv6)) - ? '%h (%s)'.format(host.name, host.ipv4 || host.ipv6) - : '%h'.format(host.name || host.ipv4 || host.ipv6)).nobr() - ); - else - tr.insertCell(-1).innerHTML = '?'; - - tr.insertCell(-1).innerHTML = String.format( - ' %d / %d <%:dBm%>', - assoclist[j].signal, assoclist[j].noise, assoclist[j].signal - assoclist[j].noise, - icon, - assoclist[j].signal, assoclist[j].noise - ); - - tr.insertCell(-1).innerHTML = nowrap(wifirate(assoclist[j], true)) + '
' + nowrap(wifirate(assoclist[j], false)); + assoctable.appendChild(E('
'.format(rowstyle), [ + E('
%h
' + .format(iw.device.name, iw.ifname)), + E('
%h
' + .format(iw.ssid || '?')), + E('
%h
' + .format(assoclist[j].bssid)), + E('
', hint ? '
%h (%h)
' + .format(name || '?', hint) : (name || '?')), + E('
%d / %d <%:dBm%>
' + .format(assoclist[j].signal, assoclist[j].noise, assoclist[j].signal - assoclist[j].noise, icon, assoclist[j].signal, assoclist[j].noise)), + E('
', [ + E('', wifirate(assoclist[j], true)), + E('
'), + E('', wifirate(assoclist[j], false)) + ]) + ])); rowstyle = (rowstyle == 1) ? 2 : 1; } } } - if (assoctable && assoctable.rows.length == 1) - { - var tr = assoctable.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 8; - td.innerHTML = '
<%:No information available%>'; - } + if (assoctable && assoctable.firstElementChild === assoctable.lastElementChild) + assoctable.appendChild(E('

<%:No information available%>
')); for (var dev in devup) { @@ -386,15 +370,17 @@ <% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %>
- +
-
- - - - + + <% if #nets > 0 then %> <% for i, net in ipairs(nets) do %> - - - - - - + + <% end %> <% else %> - - - - + + <% end %> -
+
+
+ +
+
<%=guess_wifi_hw(dev)%> (<%=dev:name()%>)
-
+ +
@@ -405,38 +391,36 @@
-
+
+
0% -
+ +
<%:Collecting data...%> -
+ +
-
+
+
<%:No network configured on this device%> -
+
<% end %> @@ -445,21 +429,21 @@

<%:Associated Stations%>

- - - - - - - - - - - - -
<%:SSID%><%:MAC-Address%><%:Host%><%:Signal%> / <%:Noise%><%:RX Rate%> / <%:TX Rate%>
+
+
+
+
<%:SSID%>
+
<%:MAC-Address%>
+
<%:Host%>
+
<%:Signal%> / <%:Noise%>
+
<%:RX Rate%> / <%:TX Rate%>
+
+
+
<%:Collecting data...%> -
+
+
+
diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index 04687f38e..85468252e 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -62,17 +62,17 @@ ); //]]> - - - - - - -
+
+
+
+

0% -
+ +
<%:Collecting data...%> -
+
+
+
<%+cbi/valuefooter%> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index 33bbee784..db1d0b888 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -275,27 +275,27 @@
-

- - - - +
+
+
<%:Inbound:%>
+
0 <%:kbit/s%>
(0 <%:kB/s%>)
-
- +
<%:Average:%>
+
0 <%:kbit/s%>
(0 <%:kB/s%>)
- - - - - - +
<%:Peak:%>
+
0 <%:kbit/s%>
(0 <%:kB/s%>)
+ +
+
<%:Outbound:%>
+
0 <%:kbit/s%>
(0 <%:kB/s%>)
-
- +
<%:Average:%>
+
0 <%:kbit/s%>
(0 <%:kB/s%>)
- - - -
<%:Inbound:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Average:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Peak:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Outbound:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Average:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Peak:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
+
<%:Peak:%>
+
0 <%:kbit/s%>
(0 <%:kB/s%>)
+
+
<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/luci-mod-admin-full/luasrc/view/admin_status/connections.htm index b7ebc4145..30d93f78b 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/connections.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -139,8 +139,8 @@ { var conn = json.connections; - while (conn_table.rows.length > 1) - conn_table.rows[0].parentNode.deleteRow(-1); + while (conn_table.firstElementChild !== conn_table.lastElementChild) + conn_table.removeChild(conn_table.lastElementChild); var lookup_queue = [ ]; @@ -153,13 +153,10 @@ { var c = conn[i]; - if ((c.src == '127.0.0.1' && c.dst == '127.0.0.1') - || (c.src == '::1' && c.dst == '::1')) + if ((c.src == '127.0.0.1' && c.dst == '127.0.0.1') || + (c.src == '::1' && c.dst == '::1')) continue; - var tr = conn_table.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); - if (!dns_cache[c.src]) lookup_queue.push(c.src); @@ -169,14 +166,13 @@ var src = dns_cache[c.src] || (c.layer3 == 'ipv6' ? '[' + c.src + ']' : c.src); var dst = dns_cache[c.dst] || (c.layer3 == 'ipv6' ? '[' + c.dst + ']' : c.dst); - tr.insertCell(-1).innerHTML = c.layer3.toUpperCase(); - tr.insertCell(-1).innerHTML = c.layer4.toUpperCase(); - tr.insertCell(-1).innerHTML = String.format('%s:%d', src, c.sport); - tr.insertCell(-1).innerHTML = String.format('%s:%d', dst, c.dport); - - var traf = tr.insertCell(-1); - traf.style.whiteSpace = 'nowrap'; - traf.innerHTML = String.format('%1024.2mB (%d <%:Pkts.%>)', c.bytes, c.packets); + conn_table.appendChild(E('
'.format(1 + (i % 2)), [ + E('
', c.layer3.toUpperCase()), + E('
', c.layer4.toUpperCase()), + E('
', [ src, ':', c.sport ]), + E('
', [ dst, ':', c.dport ]), + E('
', '%1024.2mB (%d <%:Pkts.%>)'.format(c.bytes, c.packets)), + ])); } if (lookup_queue.length > 0) @@ -324,52 +320,52 @@
-

- - - - +
+
+
<%:UDP:%>
+
0
-
- +
<%:Average:%>
+
0
- - - - - - +
<%:Peak:%>
+
0
+ +
+
<%:TCP:%>
+
0
-
- +
<%:Average:%>
+
0
- - - - - - +
<%:Peak:%>
+
0
+ +
+
<%:Other:%>
+
0
-
- +
<%:Average:%>
+
0
- - - -
<%:UDP:%>0<%:Average:%>0<%:Peak:%>0
<%:TCP:%>0<%:Average:%>0<%:Peak:%>0
<%:Other:%>0<%:Average:%>0<%:Peak:%>0
+
<%:Peak:%>
+
0
+
+

- - - - - - - - +
+
+
<%:Network%>
+
<%:Protocol%>
+
<%:Source%>
+
<%:Destination%>
+
<%:Transfer%>
+
-
-
<%:Network%><%:Protocol%><%:Source%><%:Destination%><%:Transfer%>
<%:Collecting data...%>
+
<%:Collecting data...%>
+
diff --git a/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/luci-mod-admin-full/luasrc/view/admin_status/index.htm index 2222dd703..c5952064a 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -6,13 +6,13 @@ <% local fs = require "nixio.fs" + local ipc = require "luci.ip" local util = require "luci.util" local stat = require "luci.tools.status" local ver = require "luci.version" local has_ipv6 = fs.access("/proc/net/ipv6_route") local has_dhcp = fs.access("/etc/config/dhcp") - local has_mptcp = luci.sys.exec("sysctl -n net.mptcp.mptcp_enabled | tr -d '\n'") local has_wifi = ((fs.stat("/etc/config/wireless", "size") or 0) > 0) local sysinfo = luci.util.ubus("system", "info") or { } @@ -59,6 +59,8 @@ } if wan then + local dev = wan:get_interface() + local link = dev and ipc.link(dev:name()) rv.wan = { ipaddr = wan:ipaddr(), gwaddr = wan:gwaddr(), @@ -67,12 +69,19 @@ expires = wan:expires(), uptime = wan:uptime(), proto = wan:proto(), + i18n = wan:get_i18n(), ifname = wan:ifname(), - link = wan:adminlink() + link = wan:adminlink(), + mac = dev and dev:mac(), + type = dev and dev:type(), + name = dev and dev:get_i18n(), + ether = link and link.type == 1 } end if wan6 then + local dev = wan6:get_interface() + local link = dev and ipc.link(dev:name()) rv.wan6 = { ip6addr = wan6:ip6addr(), gw6addr = wan6:gw6addr(), @@ -80,8 +89,13 @@ ip6prefix = wan6:ip6prefix(), uptime = wan6:uptime(), proto = wan6:proto(), + i18n = wan6:get_i18n(), ifname = wan6:ifname(), - link = wan6:adminlink() + link = wan6:adminlink(), + mac = dev and dev:mac(), + type = dev and dev:type(), + name = dev and dev:get_i18n(), + ether = link and link.type == 1 } end @@ -165,135 +179,95 @@ }); } + function labelList(items, offset) { + var rv = [ ]; + + for (var i = offset || 0; i < items.length; i += 2) { + var label = items[i], + value = items[i+1]; + + if (value === undefined || value === null) + continue; + + if (label) + rv.push(E('strong', [label, ': '])); + + rv.push(value, E('br')); + } + + return rv; + } + + function renderBox(title, active, childs) { + childs = childs || []; + childs.unshift(E('span', labelList(arguments, 3))); + + return E('div', { class: 'ifacebox' }, [ + E('div', { class: 'ifacebox-head center ' + (active ? 'active' : '') }, + E('strong', title)), + E('div', { class: 'ifacebox-body' }, childs) + ]); + } + + function renderBadge(icon, title) { + return E('span', { class: 'ifacebadge' }, [ + E('img', { src: icon, title: title || '' }), + E('span', labelList(arguments, 2)) + ]); + } + XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, function(x, info) { if (!(npoll++ % 5)) updateHosts(); - <% if has_mptcp == "0" then %> - var si = document.getElementById('wan4_i'); - var ss = document.getElementById('wan4_s'); - var ifc = info.wan; + var us = document.getElementById('upstream_status_table'); - if (ifc && ifc.ifname && ifc.proto != 'none') - { - var s = String.format( - '<%:Type%>: %s
' + - '<%:Address%>: %s
' + - '<%:Netmask%>: %s
' + - '<%:Gateway%>: %s
', - ifc.proto, - (ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0', - (ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255', - (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0' - ); + while (us.lastElementChild) + us.removeChild(us.lastElementChild); - for (var i = 0; i < ifc.dns.length; i++) - { - s += String.format( - '<%:DNS%> %d: %s
', - i + 1, ifc.dns[i] - ); - } + var ifc = info.wan || {}; - if (ifc.expires > -1) - { - s += String.format( - '<%:Expires%>: %t
', - ifc.expires - ); - } - - if (ifc.uptime > 0) - { - s += String.format( - '<%:Connected%>: %t
', - ifc.uptime - ); - } - - ss.innerHTML = String.format('%s', s); - si.innerHTML = String.format( - '' + - '
%s', - ifc.link, ifc.ifname - ); - } - else - { - si.innerHTML = '
?'; - ss.innerHTML = '<%:Not connected%>'; - } + us.appendChild(renderBox( + '<%:IPv4 Upstream%>', + (ifc.ifname && ifc.proto != 'none'), + [ E('div', {}, renderBadge( + '<%=resource%>/icons/%s.png'.format((ifc && ifc.type) ? ifc.type : 'ethernet_disabled'), null, + '<%:Device%>', ifc ? (ifc.name || ifc.ifname || '-') : '-', + '<%:MAC-Address%>', (ifc && ifc.ether) ? ifc.mac : null)) ], + '<%:Protocol%>', ifc.i18n || E('em', '<%:Not connected%>'), + '<%:Address%>', (ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0', + '<%:Netmask%>', (ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255', + '<%:Gateway%>', (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0', + '<%:DNS%> 1', (ifc.dns) ? ifc.dns[0] : null, + '<%:DNS%> 2', (ifc.dns) ? ifc.dns[1] : null, + '<%:DNS%> 3', (ifc.dns) ? ifc.dns[2] : null, + '<%:DNS%> 4', (ifc.dns) ? ifc.dns[3] : null, + '<%:DNS%> 5', (ifc.dns) ? ifc.dns[4] : null, + '<%:Expires%>', (ifc.expires > -1) ? '%t'.format(ifc.expires) : null, + '<%:Connected%>', (ifc.uptime > 0) ? '%t'.format(ifc.uptime) : null)); <% if has_ipv6 then %> - var si6 = document.getElementById('wan6_i'); - var ss6 = document.getElementById('wan6_s'); - var ifc6 = info.wan6; + var ifc6 = info.wan6 || {}; - if (ifc6 && ifc6.ifname && ifc6.proto != 'none') - { - var s = String.format( - '<%:Type%>: %s%s
', - ifc6.proto, (ifc6.ip6prefix) ? '-pd' : '' - ); - - if (!ifc6.ip6prefix) - { - s += String.format( - '<%:Address%>: %s
', - (ifc6.ip6addr) ? ifc6.ip6addr : '::' - ); - } - else - { - s += String.format( - '<%:Prefix Delegated%>: %s
', - ifc6.ip6prefix - ); - if (ifc6.ip6addr) - { - s += String.format( - '<%:Address%>: %s
', - ifc6.ip6addr - ); - } - } - - s += String.format( - '<%:Gateway%>: %s
', - (ifc6.gw6addr) ? ifc6.gw6addr : '::' - ); - - for (var i = 0; i < ifc6.dns.length; i++) - { - s += String.format( - '<%:DNS%> %d: %s
', - i + 1, ifc6.dns[i] - ); - } - - if (ifc6.uptime > 0) - { - s += String.format( - '<%:Connected%>: %t
', - ifc6.uptime - ); - } - - ss6.innerHTML = String.format('%s', s); - si6.innerHTML = String.format( - '' + - '
%s', - ifc6.link, ifc6.ifname - ); - } - else - { - si6.innerHTML = '
?'; - ss6.innerHTML = '<%:Not connected%>'; - } - <% end %> + us.appendChild(renderBox( + '<%:IPv6 Upstream%>', + (ifc6.ifname && ifc6.proto != 'none'), + [ E('div', {}, renderBadge( + '<%=resource%>/icons/%s.png'.format(ifc6.type || 'ethernet_disabled'), null, + '<%:Device%>', ifc6 ? (ifc6.name || ifc6.ifname || '-') : '-', + '<%:MAC-Address%>', (ifc6 && ifc6.ether) ? ifc6.mac : null)) ], + '<%:Protocol%>', ifc6.i18n ? (ifc6.i18n + (ifc6.proto === 'dhcp' && ifc6.ip6prefix ? '-PD' : '')) : E('em', '<%:Not connected%>'), + '<%:Prefix Delegated%>', ifc6.ip6prefix, + '<%:Address%>', (ifc6.ip6prefix) ? (ifc6.ip6addr || null) : (ifc6.ipaddr || '::'), + '<%:Gateway%>', (ifc6.gw6addr) ? ifc6.gw6addr : '::', + '<%:DNS%> 1', (ifc6.dns) ? ifc6.dns[0] : null, + '<%:DNS%> 2', (ifc6.dns) ? ifc6.dns[1] : null, + '<%:DNS%> 3', (ifc6.dns) ? ifc6.dns[2] : null, + '<%:DNS%> 4', (ifc6.dns) ? ifc6.dns[3] : null, + '<%:DNS%> 5', (ifc6.dns) ? ifc6.dns[4] : null, + '<%:Connected%>', (ifc6.uptime > 0) ? '%t'.format(ifc6.uptime) : null)); <% end %> <% if has_dsl then %> @@ -361,10 +335,10 @@ if (ls) { /* clear all rows */ - while( ls.rows.length > 1 ) - ls.rows[0].parentNode.deleteRow(1); + while (ls.firstElementChild !== ls.lastElementChild) + ls.removeChild(ls.lastElementChild); - for( var i = 0; i < info.leases.length; i++ ) + for (var i = 0; i < info.leases.length; i++) { var timestr; @@ -375,24 +349,16 @@ else timestr = String.format('%t', info.leases[i].expires); - var tr = ls.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - tr.insertCell(-1).innerHTML = info.leases[i].hostname ? info.leases[i].hostname : '?'; - tr.insertCell(-1).innerHTML = info.leases[i].ipaddr; - tr.insertCell(-1).innerHTML = info.leases[i].macaddr; - tr.insertCell(-1).innerHTML = timestr; + ls.appendChild(E('
'.format((i % 2) + 1), [ + E('
', info.leases[i].hostname ? info.leases[i].hostname : '?'), + E('
', info.leases[i].ipaddr), + E('
', info.leases[i].macaddr), + E('
', timestr) + ])); } - if( ls.rows.length == 1 ) - { - var tr = ls.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '
<%:There are no active leases.%>
'; - } + if (ls.firstElementChild === ls.lastElementChild) + ls.appendChild(E('

<%:There are no active leases.%>
')); } var ls6 = document.getElementById('lease6_status_table'); @@ -401,10 +367,10 @@ ls6.parentNode.style.display = 'block'; /* clear all rows */ - while( ls6.rows.length > 1 ) - ls6.rows[0].parentNode.deleteRow(1); + while (ls6.firstElementChild !== ls6.lastElementChild) + ls6.removeChild(ls6.lastElementChild); - for( var i = 0; i < info.leases6.length; i++ ) + for (var i = 0; i < info.leases6.length; i++) { var timestr; @@ -415,35 +381,29 @@ else timestr = String.format('%t', info.leases6[i].expires); - var tr = ls6.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); + var host = hosts[duid2mac(info.leases6[i].duid)], + name = info.leases6[i].hostname, + hint = null; - var host = hosts[duid2mac(info.leases6[i].duid)]; - if (!info.leases6[i].hostname) - tr.insertCell(-1).innerHTML = - (host && (host.name || host.ipv4 || host.ipv6)) - ? '
? (%h)
'.format(host.name || host.ipv4 || host.ipv6) - : '?'; - else - tr.insertCell(-1).innerHTML = - (host && host.name && info.leases6[i].hostname != host.name) - ? '
%h (%h)
'.format(info.leases6[i].hostname, host.name) - : info.leases6[i].hostname; + if (!name) { + if (host) + hint = host.name || host.ipv4 || host.ipv6; + } + else { + if (host && host.name && info.leases6[i].hostname != host.name) + hint = host.name; + } - tr.insertCell(-1).innerHTML = info.leases6[i].ip6addr; - tr.insertCell(-1).innerHTML = info.leases6[i].duid; - tr.insertCell(-1).innerHTML = timestr; + ls6.appendChild(E('
'.format((i % 2) + 1), [ + E('
', hint ? '
%h (%h)
'.format(name || '?', hint) : (name || '?')), + E('
', info.leases6[i].ip6addr), + E('
', info.leases6[i].duid), + E('
', timestr) + ])); } - if( ls6.rows.length == 1 ) - { - var tr = ls6.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '
<%:There are no active leases.%>
'; - } + if (ls6.firstElementChild === ls6.lastElementChild) + ls6.appendChild(E('

<%:There are no active leases.%>
')); } <% end %> @@ -453,30 +413,34 @@ var ws = document.getElementById('wifi_status_table'); if (ws) { - var wsbody = ws.rows[0].parentNode; - while (ws.rows.length > 0) - wsbody.deleteRow(0); + while (ws.lastElementChild) + ws.removeChild(ws.lastElementChild); for (var didx = 0; didx < info.wifinets.length; didx++) { var dev = info.wifinets[didx]; - - var tr = wsbody.insertRow(-1); - var td; - - td = tr.insertCell(-1); - td.width = "33%"; - td.innerHTML = dev.name; - td.style.verticalAlign = "top"; - - td = tr.insertCell(-1); - - var s = ''; + var net0 = (dev.networks && dev.networks[0]) ? dev.networks[0] : {}; + var vifs = []; for (var nidx = 0; nidx < dev.networks.length; nidx++) { var net = dev.networks[nidx]; var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel && !net.disabled); + var num_assoc = 0; + + for (var bssid in net.assoclist) + { + var bss = net.assoclist[bssid]; + + bss.bssid = bssid; + bss.link = net.link; + bss.name = net.name; + bss.ifname = net.ifname; + bss.radio = dev.name; + + assoclist.push(bss); + num_assoc++; + } var icon; if (!is_assoc) @@ -492,66 +456,35 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - s += String.format( - '
' + - '' + - '
%d%%' + - '
' + - '<%:SSID%>: %h
' + - '<%:Mode%>: %s
' + - '<%:Channel%>: %d (%.3f <%:GHz%>)
' + - '<%:Bitrate%>: %s <%:Mbit/s%>
', - icon, net.signal, net.noise, - net.quality, - net.link, net.ssid || '?', - net.mode, - net.channel, net.frequency, - net.bitrate || '?' - ); - - if (is_assoc) - { - s += String.format( - '<%:BSSID%>: %s
' + - '<%:Encryption%>: %s', - net.bssid || '?', - net.encryption - ); - } - else - { - s += '<%:Wireless is disabled or not associated%>'; - } - - s += '
'; - - for (var bssid in net.assoclist) - { - var bss = net.assoclist[bssid]; - - bss.bssid = bssid; - bss.link = net.link; - bss.name = net.name; - bss.ifname = net.ifname; - bss.radio = dev.name; - - assoclist.push(bss); - } + vifs.push(renderBadge( + icon, + '<%:Signal%>: %d dBm / <%:Quality%>: %d%%'.format(net.signal, net.quality), + '<%:SSID%>', E('a', { href: net.link }, [ net.ssid || '?' ]), + '<%:Mode%>', net.mode, + '<%:BSSID%>', is_assoc ? (net.bssid || '-') : null, + '<%:Encryption%>', is_assoc ? net.encryption : null, + '<%:Associations%>', is_assoc ? (num_assoc || '-') : null, + null, is_assoc ? null : E('em', '<%:Wireless is disabled or not associated%>'))); } - if (!s) - s = '<%:No information available%>'; - - td.innerHTML = s; + ws.appendChild(renderBox( + dev.device, dev.up || net0.up, + [ E('div', vifs) ], + '<%:Type%>', dev.name.replace(/^Generic | Wireless Controller .+$/g, ''), + '<%:Channel%>', net0.channel ? '%d (%.3f <%:GHz%>)'.format(net0.channel, net0.frequency) : '-', + '<%:Bitrate%>', net0.bitrate ? '%d <%:Mbit/s%>'.format(net0.bitrate) : '-')); } + + if (!ws.lastElementChild) + ws.appendChild(E('<%:No information available%>')); } var ac = document.getElementById('wifi_assoc_table'); if (ac) { /* clear all rows */ - while( ac.rows.length > 1 ) - ac.rows[0].parentNode.deleteRow(1); + while (ac.firstElementChild !== ac.lastElementChild) + ac.removeChild(ac.lastElementChild); assoclist.sort(function(a, b) { return (a.name == b.name) @@ -560,11 +493,8 @@ ; }); - for( var i = 0; i < assoclist.length; i++ ) + for (var i = 0; i < assoclist.length; i++) { - var tr = ac.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); - var icon; var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; if (q < 1) @@ -578,49 +508,31 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - tr.insertCell(-1).innerHTML = String.format( - ' %h', - assoclist[i].radio, assoclist[i].ifname - ); + var host = hosts[assoclist[i].bssid], + name = host ? (host.name || host.ipv4 || host.ipv6) : null, + hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; - tr.insertCell(-1).innerHTML = String.format( - '%s', - assoclist[i].link, - '%h'.format(assoclist[i].name).nobr() - ); - - tr.insertCell(-1).innerHTML = assoclist[i].bssid; - - var host = hosts[assoclist[i].bssid]; - if (host) - tr.insertCell(-1).innerHTML = String.format( - '
%s
', - ((host.name && (host.ipv4 || host.ipv6)) - ? '%h (%s)'.format(host.name, host.ipv4 || host.ipv6) - : '%h'.format(host.name || host.ipv4 || host.ipv6)).nobr() - ); - else - tr.insertCell(-1).innerHTML = '?'; - - tr.insertCell(-1).innerHTML = String.format( - ' %d / %d <%:dBm%>', - assoclist[i].signal, assoclist[i].noise, assoclist[i].signal - assoclist[i].noise, - icon, - assoclist[i].signal, assoclist[i].noise - ); - - tr.insertCell(-1).innerHTML = wifirate(assoclist[i], true).nobr() + '
' + wifirate(assoclist[i], false).nobr(); + ac.appendChild(E('
'.format(1 + (i % 2)), [ + E('
%h
' + .format(assoclist[i].radio, assoclist[i].ifname)), + E('' + .format(assoclist[i].link, assoclist[i].name)), + E('
', + assoclist[i].bssid), + E('
', + hint ? '
%h (%h)
'.format(name || '?', hint) : (name || '?')), + E('
%d / %d <%:dBm%>
' + .format(assoclist[i].signal, assoclist[i].noise, assoclist[i].signal - assoclist[i].noise, icon, assoclist[i].signal, assoclist[i].noise)), + E('
', [ + E('', wifirate(assoclist[i], true)), + E('
'), + E('', wifirate(assoclist[i], false)) + ]) + ])); } - if (ac.rows.length == 1) - { - var tr = ac.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 7; - td.innerHTML = '
<%:No information available%>'; - } + if (ac.firstElementChild === ac.lastElementChild) + ac.appendChild(E('

<%:No information available%>
')); } <% end %> @@ -682,110 +594,104 @@
<%:System%> - - - - - - - - -
<%:Hostname%><%=luci.sys.hostname() or "?"%>
<%:Model%><%=pcdata(boardinfo.model or boardinfo.system or "?")%>
<%:Firmware Version%> +
+
<%:Hostname%>
<%=luci.sys.hostname() or "?"%>
+
<%:Model%>
<%=pcdata(boardinfo.model or "?")%>
+
<%:Architecture%>
<%=pcdata(boardinfo.system or "?")%>
+
<%:Firmware Version%>
<%=pcdata(ver.distname)%> <%=pcdata(ver.distversion)%> / <%=pcdata(ver.luciname)%> (<%=pcdata(ver.luciversion)%>) -
<%:Kernel Version%><%=unameinfo.release or "?"%>
<%:Local Time%>-
<%:Uptime%>-
<%:Load Average%>-
+
+
<%:Kernel Version%>
<%=unameinfo.release or "?"%>
+
<%:Local Time%>
-
+
<%:Uptime%>
-
+
<%:Load Average%>
-
+
<%:Memory%> - - - - -
<%:Total Available%>-
<%:Free%>-
<%:Buffered%>-
+
+
<%:Total Available%>
-
+
<%:Free%>
-
+
<%:Buffered%>
-
+
<% if swapinfo.total > 0 then %>
<%:Swap%> - - - -
<%:Total Available%>-
<%:Free%>-
+
+
<%:Total Available%>
-
+
<%:Free%>
-
+
<% end %>
<%:Network%> - - <% if has_mptcp == "0" then %> - - <% if has_ipv6 then %> - - <% end %> - <% end %> - -
<%:IPv4 WAN Status%> - - - -

?
<%:Collecting data...%>
-
<%:IPv6 WAN Status%> - - - -

?
<%:Collecting data...%>
-
<%:Active Connections%>-
+
+ <%:Collecting data...%> +
+ +
+
<%:Active Connections%>
-
+
<% if has_dhcp then %>
<%:DHCP Leases%> - - - - - - - - - - -
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Leasetime remaining%>

<%:Collecting data...%>
+
+
+
<%:Hostname%>
+
<%:IPv4-Address%>
+
<%:MAC-Address%>
+
<%:Leasetime remaining%>
+
+
+

<%:Collecting data...%>
+
+
<% end %> <% if has_dsl then %>
- <%:DSL%> - - -
<%:DSL Status%> - - - -

?
<%:Collecting data...%>
-
+ <%:DSL%> +
+
+
<%:DSL Status%>
+
+
+
+

?
+
<%:Collecting data...%>
+
+
+
+
+
<% end %> @@ -793,27 +699,27 @@
<%:Wireless%> - - -
<%:Collecting data...%>
+
+ <%:Collecting data...%> +
<%:Associated Stations%> - - - - - - - - - - - - -
 <%:Network%><%:MAC-Address%><%:Host%><%:Signal%> / <%:Noise%><%:RX Rate%> / <%:TX Rate%>

<%:Collecting data...%>
+
+
+
 
+
<%:Network%>
+
<%:MAC-Address%>
+
<%:Host%>
+
<%:Signal%> / <%:Noise%>
+
<%:RX Rate%> / <%:TX Rate%>
+
+
+

<%:Collecting data...%>
+
+
<% end %> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm index 3f4b83b80..ced4d5f77 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -92,14 +92,14 @@ <% for _, tbl in ipairs(tables) do chaincnt = 0 %>

<%:Table%>: <%=tbl%>

- +
<% for _, chain in ipairs(ipt:chains(tbl)) do rowcnt = 0 chaincnt = chaincnt + 1 chaininfo = ipt:chain(tbl, chain) %> -
- - - - - - - - - - - - - + + +
+
<%:Pkts.%>
+
<%:Traffic%>
+
<%:Target%>
+
<%:Prot.%>
+
<%:In%>
+
<%:Out%>
+
<%:Source%>
+
<%:Destination%>
+
<%:Options%>
+
<% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> - - - - - - - - - - - +
+
<%=rule.packets%>
+
<%=wba.byte_format(rule.bytes)%>
+
<%=rule.target and link_target(tbl, rule.target) or "-"%>
+
<%=rule.protocol%>
+
<%=link_iface(rule.inputif)%>
+
<%=link_iface(rule.outputif)%>
+
<%=rule.source%>
+
<%=rule.destination%>
+
<%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%>
+
<% end %> <% if rowcnt == 1 then %> - - - +
+
<%:No rules in this chain%>
+
<% end %> <% end %> <% if chaincnt == 0 then %> - - - +
+
<%:No chains in this table%>
+
<% end %> -
+
+

<%:Chain%> <%=chain%> (<%- if chaininfo.policy then -%> @@ -107,47 +107,47 @@ <%- else -%> <%:References%>: <%=chaininfo.references-%> <%- end -%>) -
<%:Pkts.%><%:Traffic%><%:Target%><%:Prot.%><%:In%><%:Out%><%:Source%><%:Destination%><%:Options%>
<%=rule.packets%><%=wba.byte_format(rule.bytes)%><%=rule.target and link_target(tbl, rule.target) or "-"%><%=rule.protocol%><%=link_iface(rule.inputif)%><%=link_iface(rule.outputif)%><%=rule.source%><%=rule.destination%><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%>
<%:No rules in this chain%>
<%:No chains in this table%>
+


<% end %> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/luci-mod-admin-full/luasrc/view/admin_status/load.htm index 97a2f5ed5..c8ada7156 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/load.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -248,37 +248,37 @@
-

- - - - +
+
+
<%:1 Minute Load:%>
+
0
-
- +
<%:Average:%>
+
0
- - - - - - +
<%:Peak:%>
+
0
+ +
+
<%:5 Minute Load:%>
+
0
-
- +
<%:Average:%>
+
0
- - - - - - +
<%:Peak:%>
+
0
+ +
+
<%:15 Minute Load:%>
+
0
-
- +
<%:Average:%>
+
0
- - - -
<%:1 Minute Load:%>0<%:Average:%>0<%:Peak:%>0
<%:5 Minute Load:%>0<%:Average:%>0<%:Peak:%>0
<%:15 Minute Load:%>0<%:Average:%>0<%:Peak:%>0
+
<%:Peak:%>
+
0
+
+
<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/luci-mod-admin-full/luasrc/view/admin_status/routes.htm index f474c7156..af8037135 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/routes.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -39,28 +39,28 @@
ARP
- - - - - - +
+
+
<%_IPv4-Address%>
+
<%_MAC-Address%>
+
<%:Interface%>
+
<% for _, v in ipairs(ip.neighbors({ family = 4 })) do if v.mac then %> -
- - - - +
+
<%=v.dest%>
+
<%=v.mac%>
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
<% style = not style end end %> -
<%_IPv4-Address%><%_MAC-Address%><%:Interface%>
<%=v.dest%><%=v.mac%><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+

@@ -69,24 +69,24 @@ <%_Active IPv4-Routes%>
- - - - - - - - +
+
+
<%:Network%>
+
<%:Target%>
+
<%_IPv4-Gateway%>
+
<%:Metric%>
+
<%:Table%>
+
<% for _, v in ipairs(ip.routes({ family = 4, type = 1 })) do %> -
- - - - - - +
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%>
+
<%=v.dest%>
+
<%=v.gw%>
+
<%=v.metric or 0%>
+
<%=rtn[v.table] or v.table%>
+
<% style = not style end %> -
<%:Network%><%:Target%><%_IPv4-Gateway%><%:Metric%><%:Table%>
<%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%><%=v.dest%><%=v.gw%><%=v.metric or 0%><%=rtn[v.table] or v.table%>
+

@@ -99,31 +99,31 @@ <%_Active IPv6-Routes%>
- - - - - - - - +
+
+
<%:Network%>
+
<%:Target%>
+
<%:Source%>
+
<%:Metric%>
+
<%:Table%>
+
<% for _, v in ipairs(ip.routes({ family = 6, type = 1 })) do if v.dest and not v.dest:is6linklocal() then %> -
- - - - - - +
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
<%=v.dest%>
+
<%=v.from%>
+
<%=v.metric or 0%>
+
<%=rtn[v.table] or v.table%>
+
<% style = not style end end %> -
<%:Network%><%:Target%><%:Source%><%:Metric%><%:Table%>
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%><%=v.dest%><%=v.from%><%=v.metric or 0%><%=rtn[v.table] or v.table%>
+

@@ -132,27 +132,27 @@ <%:IPv6 Neighbours%>
- - - - - - +
+
+
<%:IPv6-Address%>
+
<%:MAC-Address%>
+
<%:Interface%>
+
<% for _, v in ipairs(ip.neighbors({ family = 6 })) do if v.dest and not v.dest:is6linklocal() and v.mac then %> -
- - - - +
+
<%=v.dest%>
+
<%=v.mac%>
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
<% style = not style end end %> -
<%:IPv6-Address%><%:MAC-Address%><%:Interface%>
<%=v.dest%><%=v.mac%><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+

diff --git a/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm index aa658ff0c..4211b2647 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -325,28 +325,28 @@
-

- - - - +
+
+
<%:Signal:%>
+
0 <%:dBm%>
-
- +
<%:Average:%>
+
0 <%:dBm%>
- - - - - - +
<%:Peak:%>
+
0 <%:dBm%>
+ +
+
<%:Noise:%>
+
0 <%:dBm%>
-
- +
<%:Average:%>
+
0 <%:dBm%>
- - - -
<%:Signal:%>0 <%:dBm%><%:Average:%>0 <%:dBm%><%:Peak:%>0 <%:dBm%>
<%:Noise:%>0 <%:dBm%><%:Average:%>0 <%:dBm%><%:Peak:%>0 <%:dBm%>
+
<%:Peak:%>
+
0 <%:dBm%>
+
+

@@ -354,17 +354,17 @@
-

- - - - +
+
+
<%:Phy Rate:%>
+
0 MBit/s
-
- +
<%:Average:%>
+
0 MBit/s
- - - -
<%:Phy Rate:%>0 MBit/s<%:Average:%>0 MBit/s<%:Peak:%>0 MBit/s
+
<%:Peak:%>
+
0 MBit/s
+
+
<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index 88e0fffd9..4944a232b 100644 --- a/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -128,34 +128,34 @@ end <% if display ~= "available" then %>
- - - - - - +
+
+
 
+
<%:Package name%>
+
<%:Version%>
+
<% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> -
- - - - + +
<%=luci.util.pcdata(n)%>
+
<%=luci.util.pcdata(v)%>
+ <% end) %> <% if empty then %> - - - - - +
+
 
+
<%:none%>
+
<%:none%>
+
<% end %> -
 <%:Package name%><%:Version%>
+ <%=luci.util.pcdata(n)%><%=luci.util.pcdata(v)%>
 <%:none%><%:none%>
+
<% else %>
@@ -168,40 +168,40 @@ end
<% end %> - - - - - - - - +
+
+
 
+
<%:Package name%>
+
<%:Version%>
+
<%:Size (.ipk)%>
+
<%:Description%>
+
<% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> -
- - - - - - + +
<%=luci.util.pcdata(n)%>
+
<%=luci.util.pcdata(v)%>
+
<%=luci.util.pcdata(s)%>
+
<%=luci.util.pcdata(d)%>
+ <% end) %> <% if empty then %> - - - - - - - +
+
 
+
<%:none%>
+
<%:none%>
+
<%:none%>
+
<%:none%>
+
<% end %> -
 <%:Package name%><%:Version%><%:Size (.ipk)%><%:Description%>
+ <%=luci.util.pcdata(n)%><%=luci.util.pcdata(v)%><%=luci.util.pcdata(s)%><%=luci.util.pcdata(d)%>
 <%:none%><%:none%><%:none%><%:none%>
+
<% if not querypat then %>
<% end %> diff --git a/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index 9e9ce2be2..c69ec1215 100644 --- a/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -36,7 +36,7 @@
-
+ "> " /> diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css index 9ba2dc3d1..06da96f22 100644 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css @@ -25,7 +25,8 @@ body { h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, q, s, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, -form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { +form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, +.table, .tbody, .tfoot, .thead, .tr, .th, .td { margin: 0; padding: 0; border: 0; @@ -112,8 +113,6 @@ option, textarea { font-size: 100%; margin: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; *vertical-align: middle; @@ -137,10 +136,15 @@ input[type="submit"] { -webkit-appearance: button; } +button[disabled], +input[type="button"][disabled], +input[type="reset"][disabled], +input[type="submit"][disabled] { + opacity: 0.7; +} + input[type="search"] { -webkit-appearance: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; box-sizing: content-box; } @@ -170,7 +174,7 @@ body { .container { width: 100%; - max-width: 1024px; + max-width: 940px; margin-left: auto; margin-right: auto; zoom: 1; @@ -368,8 +372,6 @@ code, pre { padding: 0 3px 2px; font-family: Monaco, Andale Mono, Courier New, monospace; font-size: 12px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; } @@ -388,8 +390,6 @@ pre { font-size: 12px; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; white-space: pre; white-space: pre-wrap; @@ -440,7 +440,7 @@ form .cbi-value:before, form .cbi-value:after { zoom: 1; } -form .clearfix:after +form .clearfix:after, form .cbi-value:after { clear: both; } @@ -486,13 +486,13 @@ select, line-height: 18px; color: #808080; border: 1px solid #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; } select { padding: initial; + background: #fff; + box-shadow: inset 0 -1px 3px rgba(0, 0, 0, 0.1); } input[type=checkbox], input[type=radio] { @@ -512,8 +512,6 @@ input[type=file] { padding: initial; border: initial; line-height: initial; - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; width: auto !important; } @@ -542,8 +540,6 @@ textarea { background-color: #ffffff; display: block; border-color: #eee; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); cursor: not-allowed; } @@ -557,27 +553,17 @@ textarea { } input, textarea { - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -ms-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; transition: border linear 0.2s, box-shadow linear 0.2s; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); } input:focus, textarea:focus { outline: 0; border-color: rgba(82, 168, 236, 0.8); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); } input[type=file]:focus, input[type=checkbox]:focus, select:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; outline: 1px dotted #666; } @@ -593,8 +579,6 @@ form .clearfix.error input, form .clearfix.error textarea { form .clearfix.error input:focus, form .clearfix.error textarea:focus { border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; box-shadow: 0 0 6px #f8b9b7; } @@ -615,8 +599,6 @@ form .clearfix.warning input, form .clearfix.warning textarea { form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { border-color: #be9a3f; - -webkit-box-shadow: 0 0 6px #e5d6b1; - -moz-box-shadow: 0 0 6px #e5d6b1; box-shadow: 0 0 6px #e5d6b1; } @@ -637,8 +619,6 @@ form .clearfix.success input, form .clearfix.success textarea { form .clearfix.success input:focus, form .clearfix.success textarea:focus { border-color: #458845; - -webkit-box-shadow: 0 0 6px #9acc9a; - -moz-box-shadow: 0 0 6px #9acc9a; box-shadow: 0 0 6px #9acc9a; } @@ -662,10 +642,8 @@ textarea[readonly] { .cbi-page-actions { background: #f5f5f5; margin-bottom: 18px; - padding: 17px 20px 18px 150px; + padding: 17px 20px 18px 17px; border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; text-align: right; } @@ -710,7 +688,12 @@ textarea[readonly] { * Tables.less * Tables for, you guessed it, tabular data * ---------------------------------------- */ -table { +.tr { display: table-row; } +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.table { + display: table; width: 100%; margin-bottom: 18px; padding: 0; @@ -718,28 +701,63 @@ table { border-collapse: collapse; } -table th, table td { +.table .th, .table .td { + display: table-cell; + vertical-align: middle; /* Fixme */ padding: 10px 10px 9px; line-height: 18px; text-align: left; } -table th { +.table .th { padding-top: 9px; font-weight: bold; vertical-align: middle; } -table td { +.table .td { vertical-align: top; border-top: 1px solid #ddd; } -table tbody th { +.table .tbody .th { border-top: 1px solid #ddd; vertical-align: top; } +/* + * Table for compatibility with old packages + * ---------------------------------------- */ +table { + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} + +table th, table td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} + +table th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} + +table td { + vertical-align: top; + border-top: 1px solid #ddd; +} + +table tbody th { + border-top: 1px solid #ddd; + vertical-align: top; +} + /* Patterns.less * Repeatable UI elements outside the base styles provided from the scaffolding * ---------------------------------------------------------------------------- */ @@ -789,16 +807,7 @@ header p { header .fill { background-color: #0d6eff; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#0c5fdc), to(#0d6eff)); - background-image: -moz-linear-gradient(top, #0c5fdc, #0d6eff); - background-image: -ms-linear-gradient(top, #0c5fdc, #0d6eff); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #0c5fdc), color-stop(100%, #0d6eff)); - background-image: -webkit-linear-gradient(top, #0c5fdc, #0d6eff); - background-image: -o-linear-gradient(top, #0c5fdc, #0d6eff); - background-image: linear-gradient(top, #0c5fdc, #0d6eff); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0c5fdc', endColorstr='#0d6eff', GradientType=0); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + background-image: linear-gradient(to bottom, #0c5fdc, #0d6eff); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); padding: 0 5px; } @@ -819,7 +828,7 @@ header div > ul > li, .nav > li { header div > ul a, .nav a { display: block; float: none; - padding: 10px 10px 11px; + padding: 20px 20px 11px; line-height: 19px; text-decoration: none; } @@ -904,14 +913,7 @@ header div > ul .dropdown-menu li a:hover, .nav .dropdown-menu li a:hover { background-color: #191919; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); - background-image: -moz-linear-gradient(top, #292929, #191919); - background-image: -ms-linear-gradient(top, #292929, #191919); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); - background-image: -webkit-linear-gradient(top, #292929, #191919); - background-image: -o-linear-gradient(top, #292929, #191919); - background-image: linear-gradient(top, #292929, #191919); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); + background-image: linear-gradient(to bottom, #292929, #191919); color: #ffffff; } @@ -950,9 +952,6 @@ a.menu:after, .dropdown-toggle:after { border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 4px solid #ffffff; - filter: alpha(opacity=50); - -khtml-opacity: 0.5; - -moz-opacity: 0.5; opacity: 0.5; } @@ -960,7 +959,7 @@ a.menu:after, .dropdown-toggle:after { background-color: #ffffff; float: left; position: absolute; - top: 40px; + top: 45px; left: -9999px; z-index: 900; min-width: 160px; @@ -974,21 +973,15 @@ a.menu:after, .dropdown-toggle:after { border-color: rgba(0, 0, 0, 0.2); border-style: solid; border-width: 0 1px 1px; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; - -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; background-clip: padding-box; } .menu-dropdown li, .dropdown-menu li { float: none; display: block; - background-color: none; + background-color: transparent; } .menu-dropdown .divider, .dropdown-menu .divider { @@ -1015,18 +1008,9 @@ header .dropdown-menu a.hover, .dropdown-menu a.hover { background-color: #dddddd; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); - background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); - background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); - background-image: -o-linear-gradient(top, #eeeeee, #dddddd); - background-image: linear-gradient(top, #eeeeee, #dddddd); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); + background-image: linear-gradient(to bottom, #eeeeee, #dddddd); color: #404040; text-decoration: none; - -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); } @@ -1100,14 +1084,25 @@ header .dropdown-menu a.hover, margin-bottom: -1px; } +.cbi-tabmenu.map { + margin: 0; +} + +.cbi-tabmenu.map > li { + font-size: 16.5px; + font-weight: bold; +} + +.cbi-tabcontainer > fieldset.cbi-section[id] > legend { + display: none; +} + .tabs > li > a, .cbi-tabmenu > li > a { padding: 0 15px; margin-right: 2px; line-height: 34px; border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } @@ -1132,8 +1127,6 @@ header .dropdown-menu a.hover, .cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { top: 35px; border-width: 1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; border-radius: 0 6px 6px 6px; } @@ -1168,20 +1161,9 @@ header .dropdown-menu a.hover, margin: 0 0 18px; background-color: #f5f5f5; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); - background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); - background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); - background-image: linear-gradient(top, #ffffff, #f5f5f5); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + background-image: linear-gradient(to bottom, #ffffff, #f5f5f5); border: 1px solid #ddd; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; box-shadow: inset 0 1px 0 #ffffff; } @@ -1235,14 +1217,7 @@ footer { .alert-message.error { background-color: #c43c35; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1251,14 +1226,7 @@ footer { .btn.success, .alert-message.success { background-color: #57a957; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + background-image: linear-gradient(to bottom, #62c462, #57a957); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #57a957 #57a957 #3d773d; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1267,14 +1235,7 @@ footer { .btn.info, .alert-message.info { background-color: #339bb9; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #339bb9 #339bb9 #22697d; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1286,13 +1247,7 @@ footer { display: inline-block; background-color: #e6e6e6; background-repeat: no-repeat; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); padding: 5px 14px 6px; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); color: #333; @@ -1300,11 +1255,7 @@ footer { line-height: normal; border: 1px solid #ccc; border-bottom-color: #bbb; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } @@ -1327,14 +1278,7 @@ footer { padding: 5px 14px 6px; background-color: #0064cd; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); - background-image: -moz-linear-gradient(top, #049cdb, #0064cd); - background-image: -ms-linear-gradient(top, #049cdb, #0064cd); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); - background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); - background-image: -o-linear-gradient(top, #049cdb, #0064cd); - background-image: linear-gradient(top, #049cdb, #0064cd); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); + background-image: linear-gradient(to bottom, #049cdb, #0064cd); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1349,22 +1293,12 @@ footer { .cbi-button-up, .cbi-input-up { background-position: center center; - background-image: url('../resources/cbi/up.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/up.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/up.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/up.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/up.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } .cbi-button-down, .cbi-input-down { background-position: center center; - background-image: url('../resources/cbi/down.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/down.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/down.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/down.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/down.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1372,11 +1306,6 @@ footer { .cbi-input-find { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/find.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/find.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/find.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/find.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/find.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1384,11 +1313,6 @@ footer { .cbi-input-add { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/add.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/add.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/add.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/add.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/add.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1396,11 +1320,6 @@ footer { .cbi-input-apply { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/apply.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/apply.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/apply.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/apply.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/apply.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1408,11 +1327,6 @@ footer { .cbi-input-reset { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/reset.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/reset.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reset.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reset.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reset.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1420,11 +1334,6 @@ footer { .cbi-input-edit { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/edit.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/edit.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/edit.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/edit.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/edit.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1432,11 +1341,6 @@ footer { .cbi-input-remove { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/remove.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/remove.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/remove.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/remove.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/remove.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1444,11 +1348,6 @@ footer { .cbi-input-reload { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/reload.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/reload.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reload.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reload.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reload.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1456,11 +1355,6 @@ footer { .cbi-input-link { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/link.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/link.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/link.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/link.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/link.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1468,43 +1362,24 @@ footer { .cbi-input-download { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/download.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/download.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/download.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/download.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/download.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } .btn.active, .btn:active { - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled { cursor: default; background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=65); - -khtml-opacity: 0.65; - -moz-opacity: 0.65; opacity: 0.65; - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; } .btn[disabled] { cursor: default; background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=65); - -khtml-opacity: 0.65; - -moz-opacity: 0.65; opacity: 0.65; - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; } @@ -1512,8 +1387,6 @@ footer { font-size: 15px; line-height: normal; padding: 9px 14px 9px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; border-radius: 6px; } @@ -1562,10 +1435,6 @@ footer { padding: 3px 9px 3px 27px; } -:root .alert-message, :root .btn { - border-radius: 0 0; -} - button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { padding: 0; border: 0; @@ -1578,47 +1447,30 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { font-weight: bold; line-height: 13.5px; text-shadow: 0 1px 0 #ffffff; - filter: alpha(opacity=25); - -khtml-opacity: 0.25; - -moz-opacity: 0.25; opacity: 0.25; } .close:hover { color: #000000; text-decoration: none; - filter: alpha(opacity=40); - -khtml-opacity: 0.4; - -moz-opacity: 0.4; opacity: 0.4; } -.alert-message { +.alert-message, .errorbox { position: relative; padding: 7px 15px; margin-bottom: 18px; color: #404040; background-color: #eedc94; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); - background-image: -moz-linear-gradient(top, #fceec1, #eedc94); - background-image: -ms-linear-gradient(top, #fceec1, #eedc94); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); - background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); - background-image: -o-linear-gradient(top, #fceec1, #eedc94); - background-image: linear-gradient(top, #fceec1, #eedc94); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); + background-image: linear-gradient(to bottom, #fceec1, #eedc94); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #eedc94 #eedc94 #e4c652; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); border-width: 1px; border-style: solid; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); } @@ -1654,8 +1506,6 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { } .alert-message .btn { - -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); } @@ -1667,8 +1517,6 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { text-transform: uppercase; white-space: nowrap; background-color: #bfbfbf; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; text-shadow: none; } @@ -1711,7 +1559,6 @@ a.label:hover { color: #808080; display: inline-block; font-size: 13px; - height: 22 dpx; line-height: 18px; } @@ -1743,6 +1590,8 @@ header .pull-right { padding-top: 8px; } .right { text-align: right !important; } +.center { text-align: center !important; } + .cbi-value-field { line-height: 1.5em; } .cbi-value-field input[type=checkbox], @@ -1756,21 +1605,25 @@ table table td, border: none; } -table.cbi-section-table input, -table.cbi-section-table textarea, -table.cbi-section-table select { +.table.cbi-section-table input, +.table.cbi-section-table textarea, +.table.cbi-section-table select { width: auto; } -table.cbi-section-table td.cbi-section-table-cell { +.table.cbi-section-table .td.cbi-section-table-cell { white-space: nowrap; text-align: right; } -table.cbi-section-table td.cbi-section-table-cell select { +.table.cbi-section-table .td.cbi-section-table-cell select { width: inherit; } +.table.valign-middle .td { + vertical-align: middle; +} + .cbi-value-description { display: inline; } .cbi-value-description img { vertical-align: middle; } @@ -1795,25 +1648,24 @@ table.cbi-section-table td.cbi-section-table-cell select { margin: 0 10px; text-align: center; white-space: nowrap; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; } .ifacebox .ifacebox-head { border-bottom: 1px solid #CCCCCC; padding: 2px; + background: #eee; +} + +.ifacebox .ifacebox-head.active { + background: #90c0e0; } .ifacebox .ifacebox-body { @@ -1821,26 +1673,26 @@ table.cbi-section-table td.cbi-section-table-cell select { } .ifacebadge { - display: inline-block; + display: inline-flex; + flex-direction: row; white-space: nowrap; background-color: #FFFFFF; border: 1px solid #CCCCCC; padding: 2px; margin-left: 2px; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: default; + line-height: 1.2em; +} + +.ifacebadge img { + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: .25em; } .ifacebadge-active { @@ -1848,6 +1700,39 @@ table.cbi-section-table td.cbi-section-table-cell select { font-weight: bold; } +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: .5em; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; + text-align: left; +} + +.network-status-table .ifacebox-body > span { + flex: 10; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox-body .ifacebadge { + flex: 1; + margin: .5em .25em 0 .25em; + padding: .5em; + min-width: 220px; +} + .zonebadge { padding: 2px; border-radius: 4px; @@ -1876,7 +1761,7 @@ table.cbi-section-table td.cbi-section-table-cell select { } div.cbi-value var, -td.cbi-value-field var { +.td.cbi-value-field var { font-style: italic; color: #0069D6; } @@ -1912,12 +1797,14 @@ td.cbi-value-field var { display: block; font-style: normal; padding: 2px; + line-height: 19px; + white-space: pre; } .uci-change-list var ins, .uci-change-list var del { - /*display: inline;*/ - border: none; + display: inline; + /*border: none;*/ white-space: pre; font-style: normal; padding: 0px; diff --git a/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm b/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm index d0d06d1b3..b796c6587 100644 --- a/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm +++ b/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm @@ -1,6 +1,6 @@ <%# Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich + Copyright 2008-2016 Jo-Philipp Wich Copyright 2012 David Menting Licensed to the public under the Apache License 2.0. -%> @@ -36,31 +36,28 @@ c._menu_selected = true end end - - -- send as HTML5 + + -- send as HTML5 http.prepare_content("text/html") local function nodeurl(prefix, name, query) - local url = controller .. prefix .. name .. "/" + local u = url(prefix, name) if query then - url = url .. http.build_querystring(query) + u = u .. http.build_querystring(query) end - return pcdata(url) + return pcdata(u) end - local function subtree(prefix, node, level) + local function render_tabmenu(prefix, node, level) if not level then level = 1 end local childs = disp.node_childs(node) if #childs > 0 then - - if level > 2 then -%> -
    - <% - end + if level > 2 then + write('
      ') + end local selected_node local selected_name @@ -72,99 +69,70 @@ selected_node = nnode selected_name = v end - if level > 2 then - %> -
    • - <%=striptags(translate(nnode.title))%> -
    • - <% end + + if level > 2 then + write('
    • %s
    • ' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end + end + + if level > 2 then + write('
    ') end - - if level > 2 then - %> -
-<% end if selected_node then - subtree(prefix .. selected_name .. "/", selected_node, level + 1) + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) end end end --%> - - - - - <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI - - - - - - <% if node and node.css then %> - <% end -%> - <% if css then %> - <% end -%> - - - - -
-
-
- OMR OpenMPTCProuter - ') + end + end + + local function render_changes() + -- calculate the number of unsaved changes if tree.nodes[category] and tree.nodes[category].ucidata then local ucichanges = 0 @@ -175,30 +143,69 @@ end end end - %> -
- <% if ucichanges > 0 then %> - <%:Unsaved Changes%>: <%=ucichanges%> - <% end %> - -
- <% end %> -
-
-
-<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -
-
-

<%:No password set!%>

- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>
- "><%:Go to password configuration...%> -
-
-<%- end -%> + if ucichanges > 0 then + write('%s: %d' %{ + url(category, 'uci/changes'), + http.urlencode(http.formvalue('redir') or table.concat(disp.context.request, "/")), + translate('Unsaved Changes'), + ucichanges + }) + end + end + end +-%> + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + -
-<% if category then subtree("/" .. category .. "/", cattree) end %> + +
+
+
+ OMR OpenMPTCProuter + <% render_topmenu() %> +
+ <% render_changes() %> + +
+
+
+
+ + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+
+

<%:No password set!%>

+ <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>
+ "><%:Go to password configuration...%> +
+
+ <%- end -%> + + + +
+ <% if category then render_tabmenu(category, cattree) end %> From 6ca4577c2cc8cace8d22f7723887d6d6419e657c Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 31 May 2018 15:44:40 +0200 Subject: [PATCH 039/307] Allow ICMP from VPN to OMR --- openmptcprouter/Makefile | 2 +- .../files/etc/uci-defaults/1980-omr-firewall | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/Makefile b/openmptcprouter/Makefile index dc390c815..d2d44aa60 100644 --- a/openmptcprouter/Makefile +++ b/openmptcprouter/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter -PKG_VERSION:=0.80 +PKG_VERSION:=0.90 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 9bcf6ef30..d36272bf9 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -13,6 +13,17 @@ if [ "$(uci -q show firewall | grep Allow-All-Ping)" = "" ]; then commit firewall EOF fi +if [ "$(uci -q show firewall | grep Allow-VPN-ICMP)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add firewall rule + set firewall.@rule[-1].enabled='1' + set firewall.@rule[-1].target='ACCEPT' + set firewall.@rule[-1].name='Allow-VPN-ICMP' + set firewall.@rule[-1].proto='icmp' + set firewall.@rule[-1].src='vpn' + commit firewall + EOF +fi if [ "$(uci -q show firewall | grep Allow-Lan-to-Wan)" = "" ]; then uci -q batch <<-EOF >/dev/null add firewall rule From a6c50bb94bffd7139f4361e6330d4fe2a7e628c8 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 31 May 2018 15:46:54 +0200 Subject: [PATCH 040/307] Remove IPv6 gateway change in omr-6in4 --- omr-6in4/files/etc/init.d/omr-6in4 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 9267e3a9e..dff7cb1c6 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -18,11 +18,11 @@ reload_service() { set network.omr6in4.ipaddr=$addr set network.omr6in4.peeraddr=$peer EOF - if [ "$(uci -q get glorytun.vpn.proto)" = "udp" ]; then - uci -q set network.omr6in4.gateway=fe80::a00:101 - elif [ "$(uci -q get glorytun.vpn.proto)" = "tcp" ]; then - uci -q set network.omr6in4.gateway=fe80::a00:1 - fi + #if [ "$(uci -q get glorytun.vpn.proto)" = "udp" ]; then + # uci -q set network.omr6in4.gateway=fe80::a00:101 + #elif [ "$(uci -q get glorytun.vpn.proto)" = "tcp" ]; then + # uci -q set network.omr6in4.gateway=fe80::a00:1 + #fi uci -q commit network ifup omr6in4 fi From f9d813c1704525d5c77594205d200b360ebae0af Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 1 Jun 2018 18:23:13 +0200 Subject: [PATCH 041/307] Little change --- shadowsocks-libev/files/shadowsocks-libev.init | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index ee3b3176b..bdbf69090 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -186,11 +186,11 @@ ss_rules_cb() { config_get cfgserver "$cfg" server config_get server "$cfgserver" server ss_redir_servers="$ss_redir_servers $server" - if [ "$mode" = tcp_only -o "$mode" = "tcp_and_udp" ]; then + if [ "$mode" = "tcp_only" -o "$mode" = "tcp_and_udp" ]; then eval "ss_rules_redir_tcp_$cfg=$local_port" eval "ss_rules6_redir_tcp_$cfg=$local_port" fi - if [ "$mode" = udp_only -o "$mode" = "tcp_and_udp" ]; then + if [ "$mode" = "udp_only" -o "$mode" = "tcp_and_udp" ]; then eval "ss_rules_redir_udp_$cfg=$local_port" eval "ss_rules6_redir_udp_$cfg=$local_port" fi From 383583d97c905dc456759248f7fc338a855c2d01 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 1 Jun 2018 21:15:59 +0200 Subject: [PATCH 042/307] Fix --- luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun b/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun index e5c62a320..d2616d795 100644 --- a/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun +++ b/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun @@ -26,7 +26,7 @@ EOF # set network.glorytun.netmask=255.255.255.0 # set network.glorytun.gateway=10.0.0.1 -if [ "$(uci -q show firewall | grep vpn)" = "" ]; then +if [ "$(uci -q show firewall | grep redirect_vpn_to_lan)" = "" ]; then uci -q batch <<-EOF >/dev/null add firewall zone set firewall.@zone[-1].name=vpn From 14c063c1831f86e9b47c1d4372d63aa3518a8fa1 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 1 Jun 2018 21:20:26 +0200 Subject: [PATCH 043/307] Fix css --- .../htdocs/luci-static/openmptcprouter/cascade.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css index 06da96f22..2fb7afeeb 100644 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css @@ -828,7 +828,7 @@ header div > ul > li, .nav > li { header div > ul a, .nav a { display: block; float: none; - padding: 20px 20px 11px; + padding: 20px 15px 11px; line-height: 19px; text-decoration: none; } From 5c05ea80616c0acf99b5ff958af7caf982384b96 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 4 Jun 2018 15:53:03 +0200 Subject: [PATCH 044/307] Update ShadowSocks-libev to 3.2.0 --- shadowsocks-libev/Makefile | 8 +++--- shadowsocks-libev/patches/020-NOCRYPTO.patch | 27 ++------------------ 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/shadowsocks-libev/Makefile b/shadowsocks-libev/Makefile index 76f84565a..96c1ceef9 100644 --- a/shadowsocks-libev/Makefile +++ b/shadowsocks-libev/Makefile @@ -14,14 +14,14 @@ include $(TOPDIR)/rules.mk # - check if default mode has changed from being tcp_only # PKG_NAME:=shadowsocks-libev -PKG_VERSION:=3.1.3 -PKG_RELEASE:=2 +PKG_VERSION:=3.2.0 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION) -PKG_HASH:=58fb438d2cfe33cfa6ac8c50e587e2138c50e59a4b943f88d22883bf2e192a96 +PKG_HASH:=5521cf623a07fd1e393528516a83acd2b66c5d4bb4535a52662806a6a060c606 -PKG_MAINTAINER:=Yousong Zhou +PKG_MAINTAINER:=Ycarus (Yannick Chabanois) PKG_LICENSE:=GPL-3.0+ PKG_LICENSE_FILES:=LICENSE diff --git a/shadowsocks-libev/patches/020-NOCRYPTO.patch b/shadowsocks-libev/patches/020-NOCRYPTO.patch index 781efa06a..6b83563d3 100644 --- a/shadowsocks-libev/patches/020-NOCRYPTO.patch +++ b/shadowsocks-libev/patches/020-NOCRYPTO.patch @@ -275,10 +275,10 @@ index dcc5fd9b..2e689b7a 100644 @@ -31,7 +31,8 @@ crypto_src = crypto.c \ aead.c \ stream.c \ - ppbloom.c \ + ppbloom.c \ - base64.c + base64.c \ -+ nocrypto.c ++ noencrypt.c plugin_src = plugin.c @@ -504,29 +504,6 @@ index 38057da7..206c18de 100644 +#endif //_NOENCRYPT_H \ No newline at end of file -From bc2e77324ab6e13179c89f59ea270cf7f85a60c5 Mon Sep 17 00:00:00 2001 -From: Fejes Ferenc -Date: Mon, 31 Jul 2017 12:48:26 +0200 -Subject: [PATCH 07/17] fixes - ---- - src/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 2e689b7a..90e2d598 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -32,7 +32,7 @@ crypto_src = crypto.c \ - stream.c \ - ppbloom.c \ - base64.c \ -- nocrypto.c -+ noencrypt.c - - plugin_src = plugin.c - - From 07607127317804319b0cb358080516ee99cf30e0 Mon Sep 17 00:00:00 2001 From: Fejes Ferenc Date: Mon, 31 Jul 2017 12:57:46 +0200 From 54f07a7e1e365b3fa4643b7be3754fe1f1a875fe Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 4 Jun 2018 15:53:34 +0200 Subject: [PATCH 045/307] Set glorytun MTU to 1280 --- luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun b/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun index d2616d795..44195c088 100644 --- a/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun +++ b/luci-app-glorytun/root/etc/uci-defaults/40_luci-glorytun @@ -19,6 +19,7 @@ uci -q batch <<-EOF >/dev/null set network.glorytun.ip4table=vpn set network.glorytun.multipath=off set network.glorytun.leasetime=12h + set network.glorytun.mtu=1280 commit network EOF # set network.glorytun.proto=static From 0a00c769a1d9a0b020f23cc0201a09a93eee554e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 4 Jun 2018 22:10:32 +0200 Subject: [PATCH 046/307] Update luci-base --- luci-base/Makefile.orig | 50 +++ luci-base/htdocs/luci-static/resources/cbi.js | 190 +++++----- luci-base/luasrc/cbi.lua | 11 +- luci-base/luasrc/dispatcher.lua | 11 +- luci-base/luasrc/util.lua | 106 +++--- luci-base/luasrc/view/cbi/apply_widget.htm | 148 +++++--- .../luasrc/view/cbi/cell_valuefooter.htm | 2 +- .../luasrc/view/cbi/cell_valueheader.htm | 2 +- luci-base/luasrc/view/cbi/map.htm | 2 +- luci-base/luasrc/view/cbi/tblsection.htm | 54 +-- luci-base/luasrc/view/sysauth.htm | 4 +- luci-base/po/ca/base.po | 116 +----- luci-base/po/cs/base.po | 116 +----- luci-base/po/de/base.po | 246 +----------- luci-base/po/el/base.po | 111 +----- luci-base/po/en/base.po | 106 +----- luci-base/po/es/base.po | 116 +----- luci-base/po/fr/base.po | 116 +----- luci-base/po/he/base.po | 106 +----- luci-base/po/hu/base.po | 116 +----- luci-base/po/it/base.po | 217 +---------- luci-base/po/ja/base.po | 122 +----- luci-base/po/ko/base.po | 116 +----- luci-base/po/ms/base.po | 106 +----- luci-base/po/no/base.po | 116 +----- luci-base/po/pl/base.po | 353 ++++++------------ luci-base/po/pt-br/base.po | 257 +------------ luci-base/po/pt/base.po | 116 +----- luci-base/po/ro/base.po | 116 +----- luci-base/po/ru/base.po | 145 +------ luci-base/po/sk/base.po | 106 +----- luci-base/po/sv/base.po | 130 +------ luci-base/po/templates/base.pot | 106 +----- luci-base/po/tr/base.po | 290 +++++--------- luci-base/po/uk/base.po | 116 +----- luci-base/po/vi/base.po | 106 +----- luci-base/po/zh-cn/base.po | 249 +----------- luci-base/po/zh-tw/base.po | 116 +----- luci-base/src/po2lmo | Bin 0 -> 18576 bytes luci-base/src/po2lmo.o | Bin 0 -> 6376 bytes luci-base/src/template_lmo.o | Bin 0 -> 7200 bytes 41 files changed, 885 insertions(+), 3727 deletions(-) create mode 100644 luci-base/Makefile.orig create mode 100755 luci-base/src/po2lmo create mode 100644 luci-base/src/po2lmo.o create mode 100644 luci-base/src/template_lmo.o diff --git a/luci-base/Makefile.orig b/luci-base/Makefile.orig new file mode 100644 index 000000000..7f7d7e772 --- /dev/null +++ b/luci-base/Makefile.orig @@ -0,0 +1,50 @@ +# +# Copyright (C) 2008-2015 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-base + +LUCI_TYPE:=mod +LUCI_BASENAME:=base + +LUCI_TITLE:=LuCI core libraries +LUCI_DEPENDS:=+lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc +liblucihttp-lua + +PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 +PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet +PKG_HASH:=ed7680f2896269ae8633756e7edcf09050812f78c8f49e280e63c30d14f35aea +PKG_LICENSE:=Apache-2.0 + +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1 + +include $(INCLUDE_DIR)/host-build.mk + +define Package/luci-base/conffiles +/etc/luci-uploads +/etc/config/luci +/etc/config/ucitrack +endef + +include ../../luci.mk + +define Host/Configure +endef + +define Host/Compile + $(MAKE) -C src/ clean po2lmo + $(MAKE) -C $(HOST_BUILD_DIR) bin/LuaSrcDiet.lua +endef + +define Host/Install + $(INSTALL_DIR) $(1)/bin + $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo + $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/LuaSrcDiet.lua $(1)/bin/LuaSrcDiet +endef + +$(eval $(call HostBuild)) + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-base/htdocs/luci-static/resources/cbi.js b/luci-base/htdocs/luci-static/resources/cbi.js index 6c35372cd..0a1961916 100644 --- a/luci-base/htdocs/luci-static/resources/cbi.js +++ b/luci-base/htdocs/luci-static/resources/cbi.js @@ -1244,44 +1244,44 @@ function cbi_validate_field(cbid, optional, type) function cbi_row_swap(elem, up, store) { var tr = elem.parentNode; - while (tr && tr.nodeName.toLowerCase() != 'tr') + + while (tr && !tr.classList.contains('cbi-section-table-row')) tr = tr.parentNode; if (!tr) return false; - var table = tr.parentNode; - while (table && table.nodeName.toLowerCase() != 'table') - table = table.parentNode; + if (up) { + var prev = tr.previousElementSibling; - if (!table) - return false; + if (prev && prev.classList.contains('cbi-section-table-row')) + tr.parentNode.insertBefore(tr, prev); + else + return; + } + else { + var next = tr.nextElementSibling ? tr.nextElementSibling.nextElementSibling : null; - var s = up ? 3 : 2; - var e = up ? table.rows.length : table.rows.length - 1; - - for (var idx = s; idx < e; idx++) - { - if (table.rows[idx] == tr) - { - if (up) - tr.parentNode.insertBefore(table.rows[idx], table.rows[idx-1]); - else - tr.parentNode.insertBefore(table.rows[idx+1], table.rows[idx]); - - break; - } + if (next && next.classList.contains('cbi-section-table-row')) + tr.parentNode.insertBefore(tr, next); + else if (!next) + tr.parentNode.appendChild(tr); + else + return; } var ids = [ ]; - for (idx = 2; idx < table.rows.length; idx++) - { - table.rows[idx].className = table.rows[idx].className.replace( - /cbi-rowstyle-[12]/, 'cbi-rowstyle-' + (1 + (idx % 2)) - ); - if (table.rows[idx].id && table.rows[idx].id.match(/-([^\-]+)$/) ) - ids.push(RegExp.$1); + for (var i = 0, n = 0; i < tr.parentNode.childNodes.length; i++) { + var node = tr.parentNode.childNodes[i]; + if (node.classList && node.classList.contains('cbi-section-table-row')) { + node.classList.remove('cbi-rowstyle-1'); + node.classList.remove('cbi-rowstyle-2'); + node.classList.add((n++ % 2) ? 'cbi-rowstyle-2' : 'cbi-rowstyle-1'); + + if (/-([^\-]+)$/.test(node.id)) + ids.push(RegExp.$1); + } } var input = document.getElementById(store); @@ -1311,58 +1311,6 @@ function cbi_tag_last(container) } } -String.prototype.serialize = function() -{ - var o = this; - switch(typeof(o)) - { - case 'object': - // null - if( o == null ) - { - return 'null'; - } - - // array - else if( o.length ) - { - var i, s = ''; - - for( var i = 0; i < o.length; i++ ) - s += (s ? ', ' : '') + String.serialize(o[i]); - - return '[ ' + s + ' ]'; - } - - // object - else - { - var k, s = ''; - - for( k in o ) - s += (s ? ', ' : '') + k + ': ' + String.serialize(o[k]); - - return '{ ' + s + ' }'; - } - - break; - - case 'string': - // complex string - if( o.match(/[^a-zA-Z0-9_,.: -]/) ) - return 'decodeURIComponent("' + encodeURIComponent(o) + '")'; - - // simple string - else - return '"' + o + '"'; - - break; - - default: - return o.toString(); - } -} - String.prototype.format = function() { if (!RegExp) @@ -1473,10 +1421,6 @@ String.prototype.format = function() subst = esc(param, quot_esc); break; - case 'j': - subst = String.serialize(param); - break; - case 't': var td = 0; var th = 0; @@ -1543,14 +1487,6 @@ String.prototype.nobr = function() return this.replace(/[\s\n]+/g, ' '); } -String.serialize = function() -{ - var a = [ ]; - for (var i = 1; i < arguments.length; i++) - a.push(arguments[i]); - return ''.serialize.apply(arguments[0], a); -} - String.format = function() { var a = [ ]; @@ -1566,3 +1502,75 @@ String.nobr = function() a.push(arguments[i]); return ''.nobr.apply(arguments[0], a); } + + +var dummyElem, domParser; + +function isElem(e) +{ + return (typeof(e) === 'object' && e !== null && 'nodeType' in e); +} + +function toElem(s) +{ + var elem; + + try { + domParser = domParser || new DOMParser(); + elem = domParser.parseFromString(s, 'text/html').body.firstChild; + } + catch(e) {} + + if (!elem) { + try { + dummyElem = dummyElem || document.createElement('div'); + dummyElem.innerHTML = s; + elem = dummyElem.firstChild; + } + catch (e) {} + } + + return elem || null; +} + +function E() +{ + var html = arguments[0], + attr = (arguments[1] instanceof Object && !Array.isArray(arguments[1])) ? arguments[1] : null, + data = attr ? arguments[2] : arguments[1], + elem; + + if (isElem(html)) + elem = html; + else if (html.charCodeAt(0) === 60) + elem = toElem(html); + else + elem = document.createElement(html); + + if (!elem) + return null; + + if (attr) + for (var key in attr) + if (attr.hasOwnProperty(key)) + elem.setAttribute(key, attr[key]); + + if (typeof(data) === 'function') + data = data(elem); + + if (isElem(data)) { + elem.appendChild(data); + } + else if (Array.isArray(data)) { + for (var i = 0; i < data.length; i++) + if (isElem(data[i])) + elem.appendChild(data[i]); + else + elem.appendChild(document.createTextNode('' + data[i])); + } + else if (data !== null && data !== undefined) { + elem.innerHTML = '' + data; + } + + return elem; +} diff --git a/luci-base/luasrc/cbi.lua b/luci-base/luasrc/cbi.lua index 472864211..4800d2aa7 100644 --- a/luci-base/luasrc/cbi.lua +++ b/luci-base/luasrc/cbi.lua @@ -1226,13 +1226,14 @@ function TypedSection.parse(self, novld) local stval = RESORT_PREFIX .. self.config .. "." .. self.sectiontype local order = self.map:formvalue(stval) if order and #order > 0 then - local sid - local num = 0 + local sids, sid = { }, nil for sid in util.imatch(order) do - self.map.uci:reorder(self.config, sid, num) - num = num + 1 + sids[#sids+1] = sid + end + if #sids > 0 then + self.map.uci:reorder(self.config, sids) + self.changed = true end - self.changed = (num > 0) end end diff --git a/luci-base/luasrc/dispatcher.lua b/luci-base/luasrc/dispatcher.lua index 2c58b0ab3..6850d7e3a 100644 --- a/luci-base/luasrc/dispatcher.lua +++ b/luci-base/luasrc/dispatcher.lua @@ -358,7 +358,7 @@ function dispatch(request) elseif key == "REQUEST_URI" then return build_url(unpack(ctx.requestpath)) elseif key == "FULL_REQUEST_URI" then - local url = { http.getenv("SCRIPT_NAME") or "" , http.getenv("PATH_INFO") } + local url = { http.getenv("SCRIPT_NAME") or "", http.getenv("PATH_INFO") } local query = http.getenv("QUERY_STRING") if query and #query > 0 then url[#url+1] = "?" @@ -507,10 +507,11 @@ function dispatch(request) else ok, err = util.copcall(target, unpack(args)) end - assert(ok, - "Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") .. - " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. - "The called action terminated with an exception:\n" .. tostring(err or "(unknown)")) + if not ok then + error500("Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") .. + " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. + "The called action terminated with an exception:\n" .. tostring(err or "(unknown)")) + end else local root = node() if not root or not root.target then diff --git a/luci-base/luasrc/util.lua b/luci-base/luasrc/util.lua index ce42af2fb..10428b0b3 100644 --- a/luci-base/luasrc/util.lua +++ b/luci-base/luasrc/util.lua @@ -100,6 +100,8 @@ end -- Scope manipulation routines -- +coxpt = setmetatable({}, { __mode = "kv" }) + local tl_meta = { __mode = "k", @@ -697,73 +699,69 @@ function checklib(fullpathexe, wantedlib) return false end +------------------------------------------------------------------------------- +-- Coroutine safe xpcall and pcall versions -- --- Coroutine safe xpcall and pcall versions modified for Luci --- original version: --- coxpcall 1.13 - Copyright 2005 - Kepler Project (www.keplerproject.org) +-- Encapsulates the protected calls with a coroutine based loop, so errors can +-- be dealed without the usual Lua 5.x pcall/xpcall issues with coroutines +-- yielding inside the call to pcall or xpcall. -- --- Copyright © 2005 Kepler Project. --- Permission is hereby granted, free of charge, to any person obtaining a --- copy of this software and associated documentation files (the "Software"), --- to deal in the Software without restriction, including without limitation --- the rights to use, copy, modify, merge, publish, distribute, sublicense, --- and/or sell copies of the Software, and to permit persons to whom the --- Software is furnished to do so, subject to the following conditions: +-- Authors: Roberto Ierusalimschy and Andre Carregal +-- Contributors: Thomas Harning Jr., Ignacio Burgueño, Fabio Mascarenhas -- --- The above copyright notice and this permission notice shall be --- included in all copies or substantial portions of the Software. +-- Copyright 2005 - Kepler Project -- --- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, --- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES --- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, --- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE --- OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-- $Id: coxpcall.lua,v 1.13 2008/05/19 19:20:02 mascarenhas Exp $ +------------------------------------------------------------------------------- -local performResume, handleReturnValue -local oldpcall, oldxpcall = pcall, xpcall -coxpt = {} -setmetatable(coxpt, {__mode = "kv"}) +------------------------------------------------------------------------------- +-- Implements xpcall with coroutines +------------------------------------------------------------------------------- +local coromap = setmetatable({}, { __mode = "k" }) --- Identity function for copcall -local function copcall_id(trace, ...) - return ... -end - --- values of either the function or the error handler -function coxpcall(f, err, ...) - local res, co = oldpcall(coroutine.create, f) - if not res then - local params = {...} - local newf = function() return f(unpack(params)) end - co = coroutine.create(newf) - end - local c = coroutine.running() - coxpt[co] = coxpt[c] or c or 0 - - return performResume(err, co, ...) -end - --- values of the function or the error object -function copcall(f, ...) - return coxpcall(f, copcall_id, ...) -end - --- Handle return value of protected call -function handleReturnValue(err, co, status, ...) +local function handleReturnValue(err, co, status, ...) if not status then return false, err(debug.traceback(co, (...)), ...) end - - if coroutine.status(co) ~= 'suspended' then + if coroutine.status(co) == 'suspended' then + return performResume(err, co, coroutine.yield(...)) + else return true, ... end - - return performResume(err, co, coroutine.yield(...)) end --- Resume execution of protected function call function performResume(err, co, ...) return handleReturnValue(err, co, coroutine.resume(co, ...)) end + +local function id(trace, ...) + return trace +end + +function coxpcall(f, err, ...) + local current = coroutine.running() + if not current then + if err == id then + return pcall(f, ...) + else + if select("#", ...) > 0 then + local oldf, params = f, { ... } + f = function() return oldf(unpack(params)) end + end + return xpcall(f, err) + end + else + local res, co = pcall(coroutine.create, f) + if not res then + local newf = function(...) return f(...) end + co = coroutine.create(newf) + end + coromap[co] = current + coxpt[co] = coxpt[current] or current or 0 + return performResume(err, co, ...) + end +end + +function copcall(f, ...) + return coxpcall(f, id, ...) +end diff --git a/luci-base/luasrc/view/cbi/apply_widget.htm b/luci-base/luasrc/view/cbi/apply_widget.htm index 543ef0b80..702512f49 100644 --- a/luci-base/luasrc/view/cbi/apply_widget.htm +++ b/luci-base/luasrc/view/cbi/apply_widget.htm @@ -1,59 +1,98 @@ <% export("cbi_apply_widget", function(redirect_ok) -%> - + +
    <% if self.allowlocal then %> -
  • - />   - > - style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge"> +
  • > + <%:Device%> - <% if self.allowany and self.allowlocal then %>(<%:input%>)<% end %> - + <% if self.allowany and self.allowlocal then -%> + (<%= self.alias ~= "dest" + and translate("output") or translate("input") %>) + <%- end %> + +
  • + <% elseif self.widget ~= "checkbox" and (self.rmempty or self.optional) then %> +
  • > + + <%:unspecified%> +
  • <% end %> <% if self.allowany then %> -
  • - />   - > - style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge"> +
  • > + <%:Any zone%> <% if self.allowany and self.allowlocal then %>(<%:forward%>)<% end %> - +
  • <% end %> <% @@ -51,45 +67,42 @@ if zone:name() ~= self.exclude then selected = selected or (value == zone:name()) %> -
  • - />   - > - style="background-color:<%=zone:get_color()%>" class="zonebadge"> + > + <%=zone:name()%>: - <% + <%- local zempty = true for _, net in ipairs(zone:get_networks()) do net = nwm:get_network(net) if net then zempty = false - %> + -%> <%=net:name()%>: - <% + <%- local nempty = true for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do nempty = false %> - style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> <% end %> - <% if nempty then %><%:(empty)%><% end %> + <% if nempty then %><%:(empty)%><% end -%> - <% end end %> - <% if zempty then %><%:(empty)%><% end %> - + <%- end end -%> + <%- if zempty then %><%:(empty)%><% end -%> +
  • <% end end %> <% if self.widget ~= "checkbox" and not self.nocreate then %> -
  • - />   - > -
    - <%:unspecified -or- create:%>  - onfocus="document.getElementById('<%=cbid%>_new').checked=true" /> -
    +
  • + + <%:create%>: + + +
  • <% end %>
- +
<%+cbi/valuefooter%> diff --git a/luci-base/luasrc/view/cbi/network_ifacelist.htm b/luci-base/luasrc/view/cbi/network_ifacelist.htm index 62dbde7dd..abfa33e1e 100644 --- a/luci-base/luasrc/view/cbi/network_ifacelist.htm +++ b/luci-base/luasrc/view/cbi/network_ifacelist.htm @@ -19,7 +19,9 @@ if value then for value in utl.imatch(value) do - checked[value] = true + for value in utl.imatch(value) do + checked[value] = true + end end else local n = self.network and net:get_network(self.network) @@ -33,57 +35,51 @@ -%> -
    - <% for _, iface in ipairs(ifaces) do - local link = iface:adminlink() - if (not self.nobridges or not iface:is_bridge()) and - (not self.noinactive or iface:is_up()) and - iface:name() ~= self.exclude - then %> -
  • - " data-update="click change"<%= - attr("type", self.widget or "radio") .. - attr("id", cbid .. "." .. iface:name()) .. - attr("name", cbid) .. attr("value", iface:name()) .. - ifattr(checked[iface:name()], "checked", "checked") - %> /> - <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%> - > - <%- end -%> -   - > - <% if link then -%><% end -%> - style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> - <% if link then -%><% end -%> - <%=pcdata(iface:get_i18n())%> - <% local ns = iface:get_networks(); if #ns > 0 then %>( - <%- local i, n; for i, n in ipairs(ns) do -%> - <%-= (i>1) and ', ' -%> - <%=n:name()%> - <%- end -%> - )<% end %> - -
  • - <% end end %> - <% if not self.nocreate then %> -
  • - " data-update="click change"<%= - attr("type", self.widget or "radio") .. - attr("id", cbid .. "_custom") .. - attr("name", cbid) .. - attr("value", " ") - %> /> - <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%> - > - <%- end -%> -   - > - - <%:Custom Interface%>: - - -
  • - <% end %> -
+ +
> + +
    + <% for _, iface in ipairs(ifaces) do + if (not self.nobridges or not iface:is_bridge()) and + (not self.noinactive or iface:is_up()) and + iface:name() ~= self.exclude + then %> + > + src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + <%=pcdata(iface:name())%> + + <%=pcdata(iface:get_i18n())%> + <% local ns = iface:get_networks(); if #ns > 0 then %>( + <%- local i, n; for i, n in ipairs(ns) do -%> + <%-= (i>1) and ', ' -%> + <%=n:name()%> + <%- end -%> + )<% end %> + + + <% end end %> + <% if not self.nocreate then %> +
  • + + <%:Custom Interface%>: + + +
  • + <% end %> +
+
<%+cbi/valuefooter%> diff --git a/luci-base/luasrc/view/cbi/network_netlist.htm b/luci-base/luasrc/view/cbi/network_netlist.htm index 8bf1a70a2..ba6ebb843 100644 --- a/luci-base/luasrc/view/cbi/network_netlist.htm +++ b/luci-base/luasrc/view/cbi/network_netlist.htm @@ -20,66 +20,62 @@ end -%> -
    - <% for _, net in ipairs(networks) do - if (net:name() ~= "loopback") and - (net:name() ~= self.exclude) and - (not self.novirtual or not net:is_virtual()) - then %> -
  • - " data-update="click change"<%= - attr("type", self.widget or "radio") .. - attr("id", cbid .. "." .. net:name()) .. - attr("name", cbid) .. attr("value", net:name()) .. - ifattr(checked[net:name()], "checked", "checked") - %> />   - > +
    > + +
      + <% if self.widget ~= "checkbox" then %> +
    • > + <%:unspecified%> +
    • + <% end %> + + <% for _, net in ipairs(networks) do + if (net:name() ~= "loopback") and + (net:name() ~= self.exclude) and + (not self.novirtual or not net:is_virtual()) + then %> + > <%=net:name()%>: <% local empty = true for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do if not iface:is_bridge() then empty = false - %> + -%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> - <% end end %> - <% if empty then %><%:(no interfaces attached)%><% end %> + <%- end end %> + <% if empty then %> + <%:(no interfaces attached)%> + - + <% end %> - - - <% end end %> + + <% end end %> - <% if not self.nocreate then %> -
    • - " data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_new") .. attr("name", cbid) .. attr("value", "-") .. ifattr(not value and self.widget ~= "checkbox", "checked", "checked")%> />   - <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%> - > - <%- end -%> -
      - > + <% if not self.nocreate then %> +
    • > + <%- if self.widget == "checkbox" then -%> <%:create:%> <%- else -%> <%:unspecified -or- create:%> - <%- end -%>  + <%- end -%> + - onfocus="document.getElementById('<%=cbid%>_new').checked=true" /> -
    -
  • - <% elseif self.widget ~= "checkbox" and self.unspecified then %> -
  • - " data-update="click change"<%= - attr("type", self.widget or "radio") .. - attr("id", cbid .. "_uns") .. - attr("name", cbid) .. - attr("value", "") .. - ifattr(not value or #value == 0, "checked", "checked") - %> />   -
    - ><%:unspecified%> -
    -
  • - <% end %> -
+ + + <% end %> + +
<%+cbi/valuefooter%> diff --git a/luci-base/src/po2lmo b/luci-base/src/po2lmo new file mode 100755 index 0000000000000000000000000000000000000000..a9535aeab49c4c334d439e4a3f62c733c9a96a5c GIT binary patch literal 18576 zcmeHPeRx#WnLm?BAY#Y_M2%l%M6mcl2!aSAZ2}BjENDcqtcv59Og=Qpq>~v8wkUKm zmg$%_Z5OvyYq4wHKHc_Nwyl)1f&qL8b+tyf+H6<1d0cd746V_kOpxo}nf}Qs(FO#4c45Lxu25fOd>EGe@$Z zewi?|jsfB6($v^7Jlc(FyHRat=#UP~P*XmZjeqNP`3k8YGCqF!sdSmFdn49ByVi@9 zppZVJU|}eA`P=|I#`)(y6f(yItu1#fTrjt_VNPpHd%SB-*P?}U z7A~mjj8t7A%T52(U3J|CnUkqUzvP4GB@Ij-%XpQ2Y2do2K1+%3XAK2 zjfY?Eg8SjeKaQVYyXYTx!FRae-*&+}UGSwYc)bfg$)z67a?xkIj8{MRxZo)le1Qx8 zt_$Agg1_K`H@o21xU|0+S>ceTVs zb1c%{DjM6{Lb3X05eFG13uk7oD+adwpAnsBevQh6x9Qov~2;UBUY1yMm3O zmR1pO$1HRg&01R{^`fzJOMAU&YYTOV#&D!jG&Y4}opjR*Z*AeW&Txzz{uhnXsc2J% zK7Dte9+yZA2(Rg>XB^DNq9nqHdSflt{XCxX! zeDz(SU}H;rsI}!D2 ze}#lexNu0TP=gd9R3QK7MY?X|&%$BRpn3 zHvMG8r|=QI?izfz#;XhZmEi~H`lTV)7PCeY7;@mwew=aOoIA}k;=nI5An2$ApXI zItPx1v7e0&e3Fd{ak~TOoMfJ62VQ1C&<+QVj$uDt4!qn(h1ll6b(2f!4hL@f8U?)$ ze2T-*Hy!vH4t$pbpXR{7@4(M=;JY38*$#ZK1Fv-8eGdE_2Y%FnpXCvxXbjJ+Ysqtn zWd|g`jC>LKKFMEAod1CTekyqm zq3rFFpG2NRCtD}^BJvzE*&4}zFatb?O14_^?~>;b$@(S#7I_YhY=z`sC(j{~6_WoA zc@Bl_$VmXRULs#Xen|4qlAl6;K=OykbE?bsNq!%B4uR}$$^V!t{P8|8?^0^4Z%Z|7G&*>e)KUe~~=9c(z9J_mF4T&Q?o4N}gRh z>zDkU?7G>Jk68Y7^d`3EO%&H$i27{Jo zz_&+SGb3IOEYasl1&(LmhAs4jZ^s)lmGQ)HD75e$=u3>wh?OKpZ;h8E0>?eQ4vn6& zB5;=lj;l-tEYBg|9?y;<9ai=$aO+T4A>10j+<|?J3)cMbbq-x!gxD+x=4L;9CX}3! z4IF{DPbLD#JkoklRtjqU;{QRdFFxE^26#!}Io|_^&u?0`_`qF{p$oMxOjE$uNC(u!btRB$Ri~H!~00t_1Y35P%wO(X9+F;FB z*0GXI7)GkopwCn@%2fOq`rV)`H+x$KWBzIsW*?_c`g#3NC>e3&J$x%2rUf!ZXL|+G zbu2frn&KR|)CRFu8O_-?h*4?4GXN&qj(My^V6-B!^_aNtQM*%bKi*s;L~8#dPa})e zlf59$ipb3C>rZ|kAmSAL$sgLOpW3P2I%V}I`*O)aolHp2-Z;vXq;o6Lhj2M1U4UhQ zMQ=iFS*hevDcnyYVpTcq3Z?xH78PnQR@wtfn?%H?8g2N6%FFCeJ;@=+_Ho;PfU#3> z0V^4T7YYT%TJYOK!SLwVSoR?=2I+oT3Gpr3G2##Di2g|9)FC5Sd?>!&>gi!7&LFJR zFB!s*5nEz(EH(jiclq%7m}h3dP3Ctfm8xgrY+*vFfNpFoVdZ0Rwb6X^=H0d>j6-DTczGp z&`V40B}t}z-4$%IB*%s)Es6C_>)=o^J4#xP6CM2}e`G-75KVh2f%E#*wNkPVeNP)o7}&lvVRv=GmY5(R1K1AWkAsOJuV*loxa^gtY*<<_p$Pklrb$4rCAc0S0jLSx6oj?zr z&mKUs5 zoZ#=BXeG90M0}ETki8q75kj;cmY0KDj};AfSX^wd3&DW!?ddx>RGLCZ2xJuN8Srq; zlNv?iXaOoRng@qYpC33O*W42ahbra=KID3t2xN-WffENar^6H19=Ys%8EaT#v?#VI zG3t$#Cq_NK?j(9c_EC0;|1%)^8>*O>i;N*0K^CsDDHE~D z=_JKV$1uP*>jt#YfJc)51=w%(Bu79oC1gPQlgIFh>J!<=@sYVl_8~b507nH`s3FUP z{|9_O6TYAI%@Tegu=re)xn8PLVJ971o|g)h;#Z=RG8e0-&SRx^GI>P!SyzQH1_h({ z?U}m6k@*f8aze(4-A9rtm<}285?M&!1J{nxy(-dT>2>o}nV-H3kQ*SGrImOK-E=Af zMTDmW87s9CKVoDaqprPOa>z;zpjRta&DJl-!M>KewK6lDel}w7*0vw-LnT_N{d|cj zXrKP1e4~b-Ke-;CP!!nmY&6N9oqPjF&Cpg)?vLQj94n)*`+2mV7Mb0MdcnE*9drlj zIk8{*_jNxG-KVSJJ@XMFLpw7I^bVPmuX~4bMQ$IpjK9pMshyVE>7De&wII;TaVo*I~q;h1eLfZJBerrZm-8`*UcC+SI_$=}qp7t<;gH z31*@+vOQX z-**#RM@4KSx&dB|ROXl340Ar8oX%G3s64;R0#L>#cn^-H8PcaQ-5(f59SHprVQoKN zrzW?(velp54N@?A_;LW0R!9!yl5);d=uv}WCxs--T7!;=_i;T7o(~QKf$oK```^?+ zAV<{!ynu5fMHc%crSnhFdAbtrGylxE@s^>)GAm#AH17)r9aRa_6pR-#)>5M zqSbTecX2d#fX8vjQ4Qd4Nlm4KEr_l8d1|6oa+(onW`95g`vvOtSZ7$ugx}*qQNAH; zgc|oH+X^((J7r1LY_>XeR0VVav(bAV6;LSy(o-O+WhP&Suzh5PW`&t;7fntHQkJUA zp>it6;Ng5B>l1!LbemFvC-yUb;Y(hDZtu`}ZJ6wtn|*$kQC6NBfht+DNeW7CBSEX; z?OrRDd)`A5toL;k zR_>`jToO1IpLVL&@SJpjvdvTE7(WNmsjP;-!6c8DMuvB=GG+WKN}gd^sE4De_%k?< z*o$+p-6+dZ!85#)Ba>CTOxk-Am6`n(N|E0146;6|=7jlpRY?V2h2|sF#I%9B7#eO) zZvYk;Qc7>b7BKdf*nh@qD6rBSS$n9BQgo!fs9{XPJ=46v5CIn{h{_=PHbs~K1G`fd zxmt&P&1~ibmqQ}{HPzIKXDqY%Rc9=Nn3Z(Jmz*e*ZJfzIEC&&5cvMneT$j z5fNi+Lxqb)V1$dtF#4Tp7AsZq4|JwjRbW3j6BOoEq!D`(FA7Mb)0ja2T^d33%70_~ zKV5O~Z+q62c(8!*jxMA)u~_C-n2UPe(i?Z)JL^AA)eJ&%9GokIixqPxrC>t zrI}mc(mME&H+J5<|L{#0Yf>MqNxi=!^>*#pv{$XfVUM-=wfI~7&f=C$wYS!8s=ci? zh%;DmICnHG&zIq=(lJr5m|2Q_Xd1*m%|h2py$eT`R_dfYh|OB4x=aH3vugQ03355i z4v)tpzmF9n5RFEnSNmsmPEz=W&QMdByuYQrBOa^ji1;J%7*nlnkx61DzC{l=_+t^j z{65={@46utQE|6u>uhRi@Xru8ZfTE&y8QSGJQ9Tyzr-oUm*x;(ACLJXjedN)9*J%d zvpU74RkJ$j9O=1W8QXc@C4Hd$@?gcAV`F8Q`(r4}0?=;ISAl;eJ2tik{9({m&{5C_ zK(9f^{2}NI7?r;Qor=lu1nB2Lr(sc=g2iP4=pgp3w}NiL8`>8@r{lcf5zx%&*w|B` zH{osZRnR|SQvMM1W^6~#=kW?o5w8J#8MFcPaSWnv&|-9q=Rl`{9wUV+AJ0AOgr}>* zb6(lR(q7NR3gY|{V;7p`GAih2e0?EiLQehaH^#=Q5r-(RSXo|qt?%@^OSg$npS$GJ z`7>wG1?^YhZxQ@rD{DWry%m2~qu#D0T3cRmf6?;EoJjdl{ssJ9|1t7MAa8)2{%!mF zP$003?lU&@|Pj+$4YDaw-Cp^lDs(BUt-v+J_c&*c^{F%G9UJ%_psZ4B2WI9 zEocAwJYLCu!S*oq>3yb%nb7_@$Y-KIwIglIi(2e*9EUs#`QPW+KWf{T0e=tuFqCJ1 zt8ITdJ=T8N-KcN#&($oj(q+wf~y9s%BTVCxx8v6S|I)<# zj=eD7Bf1~FqUoEOzOU&7-9gUM^kPjHYPwR>n>20IbhD=SYx&L~t_PBAVaiQJ8+4kCzHF9`fc7bK$6u?d@c{j@EDx)B=H7~bHB)k^E>hHYh1n)0J}uvOZ1OvfP)i88H&)4U^KMR|w=+$PwVlv_J^LX`e*aiQs3;vD^J`wfC_**Yh zIm&l4B+rz%i6TcYb-|aq;9qjd_XZdJCKvpE7yMhm*)E0c{)CJEzqsJf1NY~OX{Y#( zIHl-pVb)C}$PyR1dAnE(MqT`uVWTu&J6`C5FO>LXacH`7EZ@nIT&3{}Js#ydF!0a1 z__<5#uh)Lsb)0dHuh3JmJad3-GyW~na5oGJn4e}68O0HpE@E} z;Bd66UNp3XMVzOzLf!+yb*NZ0R3F3j9$YDE61eyjY-w)@cPVi&j(bM)uh5JV#KLVI zt)W;rs2t*xcaIu^*qq`hHVE^USTGcghPD7|5Wy9Hb6xG))ywlG@?H`kT-Xc-tl-LZ zwQB=GYsESdT(#!kz zE>eYBBTa(Wnrdpy1teZOQn$78F_e~fyz;@1y9C9YG` zcHEw74s|x`+h6&b`tnyki12XTD<3Pog_e^pkay2=JPU2EdF7*w2hH8y$@VkX-||)D z&A5C>U17_|%;mUz^ps0y`C@r7E*}a8SyAe8nYq@MufZ#I`AFe~v|vML1Qp!gz{_f@ zuZOdSmiAyAm-qCwxk7V!=Pe)9R{--tR#$5z)L?fmM>k|I*Z25NHBz_yIvbl+yX%XB z`Fg?N9i5%J;OdfJzFgkflO2fn5bY4;Wy5?;4#XhFaLZN+>xoF`Yw&7h zKBDd$=3~L&`nAi0f$LTTKkhQ1ylq%$=)9+xFGG*V|M?j1HRkR^=0x-L)yNzoFBevI zZfT2!?hsY*qiC~9VGavNJ497`Bo?l!UAB5oEYu{bn%d)4a#&V1Y-xwFkQA3RrDStB z+Sw9m&trm+MZ>KjD(X~6YfMzhzEFi^RZ|3P40EcelJitmG$JR0s&I3#F&b(M2b&w< z#Bj<~O_s{Sq>)3Yt)(8>NAT?#Gf{rfXGB$fq^%9J?Ktbm{}4c$!SXcR!;E&}r_U2q|IWVdidviW$s5uXWihSt9`FsWp&)$r^IqxuZomMvS8$Cle zLe8^1!<%yvLu<5sVf-2vO-RtUu{Y-@hMMz4lYe3PKd0@NX@}-~(ol1rNqf9)o>G76 zeOCXQ3Xq%gTtm&dr*bt5(4%eV{gt?%)g&9#LB_L@x#a1nRZM9ql&RN=V*g-shxkPn!K?$l;J`ymLN_U65KHYY|rCQilW><#}W5{$*fZ|;LH()NC%sA(ZT44nDv zaJ3e`|JU~VHPpsUah%ljJzEKhjVAv|3gtS(cTiJrX8z^)FtIC5_1VRV9nb3p9oFQl Uqkkb zGdpuP-rVLxdCt2t^Lw6o=9%~PDWk8qNz<4VjXlWfB}o}Ox2B%&=Gku6##&jw>3m=o z7CKDlMAdX#NMpMFRkL&-&pMM6l+MxXGWq4X&r(U}EjjkzO{ag(biO`gy7VCLg1JW3 zbS8NtX0dFynxzM*>AC*J#l^8VuTsN@5bjnunKm7J%ISY=(wHTaNrTs#G!|gGDB%1$ z#9TPBuxNL>#;h5iLIcyLHWfb4c6QqBV1=^g7z^_s!2|4A_^A(gZcekm;jat{Ptj23k^FfiLzU^wh6?lj7R``ckK3!a-Q5k86$&{R! zO3MTdu~~Ry>$e}}Q-ayRRN9zEW6os`=Fl}}D02<-xx=`YU&d=xR(r)KmQC;uweYni zToe{`=fnbe88F@Et_|q12~V5LuCX9ubBuprq0E>iq|P5NkdI5v+-`F2`Tt^ppxNqx zxy7q(weSVuEgGzuO%$bL&tlz8^M2E6n=?yo+tHZ|9l{S1#yQ%q93h7;%Kcbu?;whU z)Nf+l&2{)d4KA<44K>(WhqnM0(zBXbFsdDe6SM5p^R-2NdSS4eG3VlQm(hgt>KGDr zAm%ogCyVC*DZt6%%eCCEYPnZL&YUck>)C0MEpX2v8+|I0bF)xJxU9a>y-nv7f5Vj* zDPdNmZr#z)ddjn=gxRa4HT+_<{`4O-Q!36tcY$GmFH!7r6_Mf(L5lYqDdv9?!X~}Q z2f;or9A6jz6{*;E#XfA7O4NuNgz5aALihz@D^wS)n~G(ty|P}OGar6}vxAQ_t*){8 zjYzz56Uy^Cie3bo)#hcI!o~B{Ew7(93ddR@YS=p|F7&ZMT(@~~*==5{w7kbE4|@f4 zpH&{Bx*s*H`yPTvpX}Cp#FcesXi5&DRZy2J-Ej)m!FCZvio-e3?2gl>71TMfoQCFo04zp~DdX{wbLRkVy``$FKJc&U z!c0h;c8aw5UH&%X2y>k8Mp@ZAA<6$~MCX}l{N(V~2em5Zr}6egbd42gwSmGN=SK&c zhyD_6c-c2x<>6w_HLOm)d$p6dVi>rw=sf8=p%-0nOEh1wp;7ks>;0clZGP;Xe9+~+ zkp1N+^TfY-1wH_BM8$W6TU2SK3w~9A;uy77DDx9eRQ3hPZz|J$bPm_cdVV>H>%~0% z2A$iu2x&MOGjh3XZoA%HN{ufZoXt9nV;?5j{bU;Y8=0w0SEB^?uvZvq?RjNN01$8QZ&i z_jY~5-bBXAX7&3cTOynE;mwgvcY1loR(oMF?Yjq=HqxQ3YhAW{3|nL^_YE;^)t@E~IZLma{#mZqfvUtIlk|xz^(JDt(Bd`1wb#EWlXa4f}cfMN{B6!*(GU+(F(X;LX1|`Qt3mHzQO!* z2%r&91@OlM_!9yAL;xQR;7uP~Qwx6BgCNA0_b^ zO3A_KU@Sk#a*5c`P&UqzM-x__B@@{sOXASaWLYwQJOdsd%I49<%up(GjD;~CB(%+F z+;J&#p?yq3oK6eL?;r@FlVuei$u|>(5WfYF5Zw%n)6#jX|{#}LNs_+i6@5ujJg@*`0s2YuD4;3Ic z3r-1*xr}GC&wdXXL$(Fj+X`O?JL%_40RL$Kzbd$lvzNEZ*zXj3x*w(gmEtOq_WOkW zK_4Fw{1L&)o$BYG3jc!Q|7+stCVQ2iQMfvfFDU$ril6feSMA?axN5&bTrt${mlQue zg3JDp)!v2;Q-`%41ZjpOP z%#T!%ttzy3X|B6fi2Rhea9$xLWF;P|E0zsEGl_pyaB-Xx;_|ewUCI6J-wg%%{D14y zeMUajHHIP^6YZa(f+8}0iMAm_^*2c%(lB)xqVsqCCF7TA4^%Q=w_1T!|oclK&`VpYQ#6 zK0o|4q+RQGcc1Ui``-7yckLl-*PTs~2-7XXzRYSfjWRa7wl?k(!!EXxtzf;}{TFu+ zmfg`g&zf_sOU}VL_V_aH94xcZ)}zEZ|1Bs4(V309R`t}uxu(i6_pCB^N|D%WEcROI z)NG4;njkri%tWk9ileCk7oaB1d1`j~7VDC0UG}U?r)Jx?SeM}gcdT+V0p;b;{U3gqoIXsa0^X za;;wdi4vy5RI6k-SJpsOODxeyvqngV5V}SqOC|Eq@5Kf^d9kw{YjlsFe}8e&ef1rD z`?%M9vvXYNkBz+u-jki+lHR()1hPX|ij5tXs%UnMxU@dCHo@&pk}elJVNKAv7NFbH zqDCG&0VT}z!I_Tuj374!$Xby0mMnW+EpDm%4REn;cjgV!c8osUJ$sTs<+?V_-JZ2d zl6zfixroVW;+N{U=hKB|?v$I6j2>K65u%9KY;P4i5ObcYSK$emM+~!u!?y^ki-QK` zr^?O#dflGpFh5LHam6%02CEa5)``lpiAwWCB{Ctmj_t?E6>(R2rnbz!*Vm4vtAoljX+#DGos$EHUXx1&@m+*gmF3!EODloC*q!f>WGq^hCNX+89cQjv^f zv81oD^+-z`1X9mpV}FqcfoA^Ec7+x22xGCaSHN>}E%fWNL^ePcreb5yNEI|YMqI(O zB)Gjv>CHJleieCoVkthbDE2^|I>|C#oE6UaoQO(2=lrh-@k9XlIKPrhkz+u?_$R%N zVkuU9BEacQij~T0_7!)UyS^DFqHj8+?+BHNuBg0Nw}`gg0T1NTL`fhJC$xr&QVxXb z1qD*Og*%6K4tl6#vEmoxsjTDiM3A%vw}(!kFy<~1tMp`tU2UtUh^sPn;(VB1!mK3gN0Jn zT0q{nSCDsdTe!|zF_jCBgQ%TCUBy_}MM@Fh(Z2~Did5MkXVC9!hDr)jtoU_=8?}_O zhOvzWc5`B5Au*KAWBhqc+0Gq1ZjX2D%;fBRK7LzbOQJJAygAW%lN?Jiwnp`l$L?j3 z{q2!;E0(oPpuVjKPCsfdV9vVR+P~AZW98E5vk|Ze+8u(**h_Wv7kv7IivA|O3w-%A zOgX>BdK}ngMgOZwx14Cx zTY`lVPn_0<_BMTdAEzY)VIhsgn%M{9k_xg!8~#g;u_*pDYEfuv)S^tJY#oX2jwa}T z>Iw;qwJVM&TUN)bCsBrgH)v5tC9b}0z;w0YzsL<>9SYZTkrTjf!;gFlw%q_4;SYr1 zL%_-IP8A}NQ@}<;_=iLA$3pNYL-4~P`1eEbXF~9oLvSjWjpFcp2>uJ;6o+=THR9|5 zdj-E$MxN*$J+5#)*Zn!A=W(S+oH1Y*6n>q`pA_cQ{)1m5KR*n?m*N04;%^JVuMWXC zgy1&doqb$I~8(Hu?sM=}{{d?;VY zF!C~)PT8rU{38W9OQr3>eHjf3-l2S|uMS8Lq;ikcc*u#q!4X!-4UY`w?0(h{TXuSY zjbu`NL`ah{!C{Z&(%E65)gDRZ3KXiEKfV#xMzt7?D$+{)F4GGNZEFbrP6)n9ons=? zR%t!m3Mc(-2L7ypQ(kHQ69&G@!2fRGs}1}LRZ6M5(!jSHINga_e<}q3k%3=j@Xs3f z)doJPN;Q!`W#AVKe64|hVBpsnc&j?Eq{ocUR}I|MlQwYEZr;F6{r^xn?aQ@>-4=Cq zkX^b1bbM|!a5K)m25!bVt8mg!OVoM}8T@er|8am{X4~T8%OU(T27aBP=c9lgT?gCM zfYxQ&-Jo#t6aS;;`}v5$f4zZw2L2fX|DmC0oq_*41plppuQ&Mr5Q5JuocuTKHmUke zxVgXU4BX70PKDEYO+W88_-`=$dC1^5{e0KpH}n54RgX!($^T6QUvB8P4cz2EqHtQ5 zssF7Id<`i@3$E){g_9n0U8xZM?;7~0A*1v5XNDd#&T;TiBfIp|txF9wuHQ=!2XOt) zc_M)8d;j?WuJ7?u0N3~UYyj8qLtLSvX@B&6dP4x$_bE#h4rJ}rUi9{e><9E{Br}vs z*qQw{OZ4IDVu`(l0!xhK)l+c>C^x!%L=N^-kwfcH^_kL+WYsZbRC}p?7C*w(HAIkT ztt<4Xz7N{}9LS_IDBrH+gKsNsUu)fr0qHbzk7!z6ErTG@g7&upC9G4D{qOb4e%wdo zK+EfXJ77IFS+{?}^?yyt2mR+tzAKCuDsOSLhSMwA0Vc`Ad!y#vHL>5+oAGvI$HI*h literal 0 HcmV?d00001 diff --git a/luci-mod-admin-full/Makefile b/luci-mod-admin-full/Makefile index f36a13194..d47136753 100644 --- a/luci-mod-admin-full/Makefile +++ b/luci-mod-admin-full/Makefile @@ -11,6 +11,7 @@ LUCI_TITLE:=LuCI Administration - full-featured for full control LUCI_DEPENDS:=+luci-base +luci-app-firewall PKG_BUILD_DEPENDS:=iwinfo +PKG_LICENSE:=Apache-2.0 include ../luci/luci.mk diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 153d4dac4..90647b7a3 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -381,7 +381,6 @@ if has_firewall then fwzone.template = "cbi/firewall_zonelist" fwzone.network = arg[1] - fwzone.rmempty = false function fwzone.cfgvalue(self, section) self.iface = section @@ -390,22 +389,16 @@ if has_firewall then end function fwzone.write(self, section, value) - local zone = fw:get_zone(value) - - if not zone and value == '-' then - value = m:formvalue(self:cbid(section) .. ".newzone") - if value and #value > 0 then - zone = fw:add_zone(value) - else - fw:del_network(section) - end - end - + local zone = fw:get_zone(value) or fw:add_zone(value) if zone then fw:del_network(section) zone:add_network(section) end end + + function fwzone.remove(self, section) + fw:del_network(section) + end end diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua index cacaa2595..d51a72aba 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -390,22 +390,16 @@ network.novirtual = true function network.write(self, section, value) local i = nw:get_interface(section) if i then - if value == '-' then - value = m:formvalue(self:cbid(section) .. ".newnet") - if value and #value > 0 then - local n = nw:add_network(value, {proto="none"}) - if n then n:add_interface(i) end - else - local n = i:get_network() - if n then n:del_interface(i) end - end - else - local v - for _, v in ipairs(i:get_networks()) do - v:del_interface(i) - end - for v in ut.imatch(value) do - local n = nw:get_network(v) + local _, net, old, new = nil, nil, {}, {} + + for _, net in ipairs(i:get_networks()) do + old[net:name()] = true + end + + for net in ut.imatch(value) do + new[net] = true + if not old[net] then + local n = nw:get_network(net) or nw:add_network(net, { proto = "none" }) if n then if not n:is_empty() then n:set("type", "bridge") @@ -414,6 +408,15 @@ function network.write(self, section, value) end end end + + for net, _ in pairs(old) do + if not new[net] then + local n = nw:get_network(net) + if n then + n:del_interface(i) + end + end + end end end diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua index 8277deb2f..e8a305882 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua @@ -94,14 +94,9 @@ function newnet.parse(self, section) local net, zone if has_firewall then - local zval = fwzone:formvalue(section) - zone = fw:get_zone(zval) - - if not zone and zval == '-' then - zval = m:formvalue(fwzone:cbid(section) .. ".newzone") - if zval and #zval > 0 then - zone = fw:add_zone(zval) - end + local value = fwzone:formvalue(section) + if value and #value > 0 then + zone = fw:get_zone(value) or fw:add_zone(value) end end diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css index 5bf534098..5771a94aa 100644 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css @@ -430,7 +430,6 @@ form .clearfix, form .cbi-value { margin-bottom: 18px; zoom: 1; - overflow: hidden; } form .clearfix:before, form .clearfix:after, @@ -477,6 +476,7 @@ input[type=checkbox], input[type=radio] { input, textarea, select, +.cbi-dropdown, .uneditable-input { display: inline-block; width: 210px; @@ -487,6 +487,13 @@ select, color: #808080; border: 1px solid #ccc; border-radius: 3px; + box-sizing: border-box; +} + +.cbi-dropdown { + min-width: 210px; + max-width: 400px; + width: auto; } select { @@ -1365,6 +1372,159 @@ footer { background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } +.cbi-dropdown { + border: 1px solid #ccc; + border-radius: 3px; + display: inline-flex; + padding: 0; + cursor: pointer; + height: auto; + background: linear-gradient(#fff 0%, #e9e8e6 100%); + position: relative; + color: #404040; +} + +.cbi-dropdown:focus { + outline: 2px solid #4b6e9b; +} + +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} + +.cbi-dropdown > ul.preview { + display: none; +} + +.cbi-dropdown > .open, +.cbi-dropdown > .more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 .25em; +} + +.cbi-dropdown > .more, +.cbi-dropdown > ul > li[placeholder] { + color: #777; + font-weight: bold; + text-shadow: 1px 1px 0px #fff; + display: none; +} + +.cbi-dropdown > ul > li { + display: none; + padding: .25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + color: #404040; + min-height: 20px; +} + +.cbi-dropdown > ul > li .hide-open { display: initial; } +.cbi-dropdown > ul > li .hide-close { display: none; } + +.cbi-dropdown > ul > li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} + +.cbi-dropdown[empty] > ul { + max-width: 1px; +} + +.cbi-dropdown > ul > li > form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown > ul > li img { + vertical-align: middle; + margin-right: .25em; +} + +.cbi-dropdown > ul > li > form > input[type="checkbox"] { + margin: 0; +} + +.cbi-dropdown > ul > li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open] { + position: relative; +} + +.cbi-dropdown[open] > ul.dropdown { + display: block; + background: #f6f6f5; + border: 1px solid #918e8c; + box-shadow: 0 0 4px #918e8c; + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; +} + +.cbi-dropdown > ul > li[display], +.cbi-dropdown[open] > ul.preview, +.cbi-dropdown[open] > ul.dropdown > li, +.cbi-dropdown[multiple] > ul > li > label, +.cbi-dropdown[multiple][open] > ul.dropdown > li, +.cbi-dropdown[multiple][more] > .more, +.cbi-dropdown[multiple][empty] > .more { + flex-grow: 1; + display: flex; +} + +.cbi-dropdown[empty] > ul > li, +.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], +.cbi-dropdown[multiple][open] > ul.dropdown > li > form { + display: block; +} + +.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } +.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; } + +.cbi-dropdown[open] > ul.dropdown > li { + border-bottom: 1px solid #ccc; +} + +.cbi-dropdown[open] > ul.dropdown > li[selected] { + background: #b0d0f0; +} + +.cbi-dropdown[open] > ul.dropdown > li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} + +.cbi-dropdown[open] > ul.dropdown > li:last-child { + margin-bottom: 0; + border-bottom: none; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + .btn.active, .btn:active { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } @@ -1456,7 +1616,7 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { opacity: 0.4; } -.alert-message, .errorbox { +.alert-message { position: relative; padding: 7px 15px; margin-bottom: 18px; @@ -1679,7 +1839,6 @@ table table td, background-color: #FFFFFF; border: 1px solid #CCCCCC; padding: 2px; - margin-left: 2px; background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); border-radius: 4px; @@ -1745,7 +1904,7 @@ table table td, .zonebadge > em, .zonebadge > strong { - margin: 5px; + margin: 0 2px; display: inline-block; } @@ -1753,6 +1912,10 @@ table table td, width: 6em; } +.zonebadge > .ifacebadge { + margin-left: 2px; +} + .zonebadge-empty { border: 1px dashed #AAAAAA; color: #AAAAAA; diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig new file mode 100644 index 000000000..4a40f6d68 --- /dev/null +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig @@ -0,0 +1,1970 @@ +/*! + * LuCI Bootstrap Theme + * Copyright 2012 Nut & Bolt + * By David Menting + * Based on Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html { + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 5px; +} + +h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, q, s, +small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, +form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, +.table, .tbody, .tfoot, .thead, .tr, .th, .td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} + +abbr[title], acronym[title] { + border-bottom: 1px dotted; + cursor: help; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +ol, ul { + list-style: none; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted; +} + +a:hover, a:active { + outline: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +button, +input, +select, +option, +textarea { + font-size: 100%; + margin: 0; + box-sizing: border-box; + vertical-align: baseline; + *vertical-align: middle; +} + +button, input { + line-height: normal; + *overflow: visible; +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +input[type="button"][disabled], +input[type="reset"][disabled], +input[type="submit"][disabled] { + opacity: 0.7; +} + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; + padding-top: 58px; +} + +.container { + width: 100%; + max-width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} + +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} + +.container:after { + clear: both; +} + +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} + +a:hover { + color: #00438a; + text-decoration: underline; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p, +.cbi-map-descr, +.cbi-section-descr { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} + +p small { + font-size: 11px; + color: #bfbfbf; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; + color: #404040; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} + +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 36px; +} + +h2 small { + font-size: 14px; +} + +h3, +h4, +h5, +h6 { + line-height: 36px; +} + +h3 { + font-size: 18px; +} + +h3 small { + font-size: 14px; +} + +h4 { + font-size: 16px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} + +ul, ol { + margin: 0 0 18px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; + color: #808080; +} + +ul.unstyled { + list-style: none; + margin-left: 0; +} + +dl { + margin-bottom: 18px; +} + +dl dt, dl dd { + line-height: 18px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin-left: 9px; +} + +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} + +strong { + font-style: inherit; + font-weight: bold; +} + +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} + +small { font-size: 0.9em } + +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} + +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + border-radius: 3px; +} + +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} + +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} + +fieldset { + margin-bottom: 9px; + padding-top: 9px; +} + +fieldset legend { + display: block; + font-size: 19.5px; + line-height: 1; + color: #404040; + padding-top: 20px; + *padding: 0 0 5px 0px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .cbi-tab-descr { + line-height: 18px; + margin-bottom: 18px; +} + +form .clearfix, +form .cbi-value { + margin-bottom: 18px; + zoom: 1; +} + +form .clearfix:before, form .clearfix:after, +form .cbi-value:before, form .cbi-value:after { + display: table; + content: ""; + zoom: 1; +} + +form .clearfix:after, +form .cbi-value:after { + clear: both; +} + +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} + +form .input, +form .cbi-value-field { + margin-left: 200px; +} + +form .cbi-value label.cbi-value-title { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 180px; + text-align: right; + color: #404040; +} + +input[type=checkbox], input[type=radio] { + cursor: pointer; +} + +input, +textarea, +select, +.cbi-dropdown, +.uneditable-input { + display: inline-block; + width: 210px; + height: 30px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + border-radius: 3px; + box-sizing: border-box; +} + +.cbi-dropdown { + min-width: 210px; + max-width: 400px; + width: auto; +} + +select { + padding: initial; + background: #fff; + box-shadow: inset 0 -1px 3px rgba(0, 0, 0, 0.1); +} + +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} + +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + box-shadow: none; + width: auto !important; +} + +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} + +select, input[type=file] { + *height: auto; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ +} + +select[multiple] { + height: inherit; + background-color: #ffffff; +} + +textarea { + height: auto; +} + +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} + +::-moz-placeholder { + color: #bfbfbf; +} + +::-webkit-input-placeholder { + color: #bfbfbf; +} + +input, textarea { + transition: border linear 0.2s, box-shadow linear 0.2s; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} + +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + box-shadow: none; + outline: 1px dotted #666; +} + +form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { + color: #b94a48; +} + +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} + +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + box-shadow: 0 0 6px #f8b9b7; +} + +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} + +form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { + color: #c09853; +} + +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} + +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { + border-color: #be9a3f; + box-shadow: 0 0 6px #e5d6b1; +} + +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} + +form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { + color: #468847; +} + +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} + +form .clearfix.success input:focus, form .clearfix.success textarea:focus { + border-color: #458845; + box-shadow: 0 0 6px #9acc9a; +} + +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; +} + +.actions, +.cbi-page-actions { + background: #f5f5f5; + margin-bottom: 18px; + padding: 17px 20px 18px 17px; + border-top: 1px solid #ddd; + border-radius: 0 0 3px 3px; + text-align: right; +} + +.actions .secondary-action, +.cbi-page-actions .secondary-action{ + float: right; +} + +.actions .secondary-action a, +.cbi-page-actions .secondary-action a { + line-height: 30px; +} + +.actions .secondary-action a:hover, +.cbi-page-actions .secondary-action a:hover { + text-decoration: underline; +} + +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} + +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} + +.help-block { + display: block; + max-width: 600px; +} + +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +.tr { display: table-row; } +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.table { + display: table; + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} + +.table .th, .table .td { + display: table-cell; + vertical-align: middle; /* Fixme */ + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} + +.table .th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} + +.table .td { + vertical-align: top; + border-top: 1px solid #ddd; +} + +.table .tbody .th { + border-top: 1px solid #ddd; + vertical-align: top; +} + +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +header { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; + color: #BFBFBF; +} + +header a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +header h3 a:hover, header .brand:hover, header ul .active > a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} + +header h3 { + position: relative; +} + +header h3 a, header .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} + +header p { + margin: 0; + line-height: 40px; +} + +header .fill { + background-color: #222; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #333333, #222222); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + padding: 0 5px; +} + +header div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} + +header div > ul > li, .nav > li { + display: block; + float: left; +} + +header div > ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} + +header div > ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} + +header div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} + +header div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} + +header div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +header div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} + +header div > ul a.menu:hover, +.nav a.menu:hover, +header div > ul li.open .menu, +.nav li.open .menu, +header div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +header div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +header div > ul .menu-dropdown, +.nav .menu-dropdown, +header div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #333; +} + +header div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +header div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +header div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +header div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #ffffff; +} + +header div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +header div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +header div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +header div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +header div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +header div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} + +header div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +header div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #191919; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #292929, #191919); + color: #ffffff; +} + +header div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +header div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #ffffff; +} + +header div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +header div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} + +header ul .menu-dropdown li a, header ul .dropdown-menu li a { + padding: 4px 15px; +} + +li.menu, .dropdown { + position: relative; +} + +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + opacity: 0.5; +} + +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + position: absolute; + top: 40px; + left: -9999px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + border-radius: 0 0 6px 6px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: transparent; +} + +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} + +header .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} + +header .dropdown-menu a:hover, +.dropdown-menu a:hover, +header .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #eeeeee, #dddddd); + color: #404040; + text-decoration: none; + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} + +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} + +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + left: 0; +} + +.dropdown:hover ul.dropdown-menu { + left: 0; +} + +.dropdown-menu .dropdown-menu { + position: absolute; + left: 159px; +} + +.dropdown-menu li { + position: relative; +} + +.tabs, .cbi-tabmenu { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} + +.tabs:before, +.cbi-tabmenu:before, +.tabs:after, +.cbi-tabmenu:after { + display: table; + content: ""; + zoom: 1; +} + +.tabs:after, .cbi-tabmenu:after { + clear: both; +} + +.tabs > li, .cbi-tabmenu > li { + float: left; +} + +.tabs > li > a, .cbi-tabmenu > li > a { + display: block; +} + +.tabs, +.cbi-tabmenu { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} + +.tabs > li, +.cbi-tabmenu > li { + position: relative; + margin-bottom: -1px; +} + +.cbi-tabmenu.map { + margin: 0; +} + +.cbi-tabmenu.map > li { + font-size: 16.5px; + font-weight: bold; +} + +.cbi-tabcontainer > fieldset.cbi-section[id] > legend { + display: none; +} + +.tabs > li > a, +.cbi-tabmenu > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.tabs > li > a:hover, +.cbi-tabmenu > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} + +.tabs .active > a, .tabs .active > a:hover, +.cbi-tabmenu .active > a, .cbi-tabmenu .active > a:hover, +.cbi-tab > a:link, .cbi-tab > a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +.tabs .menu-dropdown, .tabs .dropdown-menu, +.cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { + top: 35px; + border-width: 1px; + border-radius: 0 6px 6px 6px; +} + +.tabs a.menu:after, .tabs .dropdown-toggle:after, +.cbi-tabmenu a.menu:after, .cbi-tabmenu .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} + +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle, +.cbi-tabmenu li.open.menu .menu, .cbi-tabmenu .open.dropdown .dropdown-toggle { + border-color: #999; +} + +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after, +.cbi-tabmenu li.open a.menu:after, .cbi-tabmenu .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} + +.tab-content > .tab-pane, +.tab-content > div { + display: none; +} + +.tab-content > .active { + display: block; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #ffffff, #f5f5f5); + border: 1px solid #ddd; + border-radius: 3px; + box-shadow: inset 0 1px 0 #ffffff; +} + +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} + +.breadcrumb .active a { + color: #404040; +} + +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} + +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #ffffff; +} + +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} + +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #62c462, #57a957); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn, +.cbi-button { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + border-radius: 4px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.cbi-button:hover { + color: #333; + text-decoration: none; +} + +.btn:focus, +.cbi-button:focus { + outline: 1px dotted #666; +} + +.btn.primary, +.cbi-page-actions .cbi-button-apply, +.cbi-page-actions .cbi-button-save, +.cbi-page-actions .cbi-button-reset { + color: #ffffff; + padding: 5px 14px 6px; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #049cdb, #0064cd); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.cbi-input-invalid, +.cbi-value-error input { + color: #FF0000; + border-color: #FF0000; +} + +.cbi-button-up, +.cbi-input-up { + background-position: center center; + background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-down, +.cbi-input-down { + background-position: center center; + background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-find, +.cbi-input-find { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-add, +.cbi-input-add { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-apply, +.cbi-input-apply { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-reset, +.cbi-input-reset { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-edit, +.cbi-input-edit { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-remove, +.cbi-input-remove { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-reload, +.cbi-input-reload { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-link, +.cbi-input-link { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-download, +.cbi-input-download { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-dropdown { + border: 1px solid #ccc; + border-radius: 3px; + display: inline-flex; + padding: 0; + cursor: pointer; + height: auto; + background: linear-gradient(#fff 0%, #e9e8e6 100%); + position: relative; + color: #404040; +} + +.cbi-dropdown:focus { + outline: 2px solid #4b6e9b; +} + +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} + +.cbi-dropdown > ul.preview { + display: none; +} + +.cbi-dropdown > .open, +.cbi-dropdown > .more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 .25em; +} + +.cbi-dropdown > .more, +.cbi-dropdown > ul > li[placeholder] { + color: #777; + font-weight: bold; + text-shadow: 1px 1px 0px #fff; + display: none; +} + +.cbi-dropdown > ul > li { + display: none; + padding: .25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + color: #404040; + min-height: 20px; +} + +.cbi-dropdown > ul > li .hide-open { display: initial; } +.cbi-dropdown > ul > li .hide-close { display: none; } + +.cbi-dropdown > ul > li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} + +.cbi-dropdown[empty] > ul { + max-width: 1px; +} + +.cbi-dropdown > ul > li > form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown > ul > li img { + vertical-align: middle; + margin-right: .25em; +} + +.cbi-dropdown > ul > li > form > input[type="checkbox"] { + margin: 0; +} + +.cbi-dropdown > ul > li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open] { + position: relative; +} + +.cbi-dropdown[open] > ul.dropdown { + display: block; + background: #f6f6f5; + border: 1px solid #918e8c; + box-shadow: 0 0 4px #918e8c; + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; +} + +.cbi-dropdown > ul > li[display], +.cbi-dropdown[open] > ul.preview, +.cbi-dropdown[open] > ul.dropdown > li, +.cbi-dropdown[multiple] > ul > li > label, +.cbi-dropdown[multiple][open] > ul.dropdown > li, +.cbi-dropdown[multiple][more] > .more, +.cbi-dropdown[multiple][empty] > .more { + flex-grow: 1; + display: flex; +} + +.cbi-dropdown[empty] > ul > li, +.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], +.cbi-dropdown[multiple][open] > ul.dropdown > li > form { + display: block; +} + +.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } +.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; } + +.cbi-dropdown[open] > ul.dropdown > li { + border-bottom: 1px solid #ccc; +} + +.cbi-dropdown[open] > ul.dropdown > li[selected] { + background: #b0d0f0; +} + +.cbi-dropdown[open] > ul.dropdown > li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} + +.cbi-dropdown[open] > ul.dropdown > li:last-child { + margin-bottom: 0; + border-bottom: none; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + +.btn.active, .btn:active { + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; +} + +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; +} + +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + border-radius: 6px; +} + +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} + +/* Button icons for specific pages */ +.Startup .cbi-section-table input.cbi-input-apply, +.Startup .cbi-section-table input.cbi-button-apply { + background-image: url("../resources/cbi/apply.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Processes .cbi-section-table input.cbi-input-reload, +.Startup .cbi-section-table input.cbi-input-reload { + background-image: url("../resources/cbi/reload.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Processes .cbi-section-table input.cbi-input-remove, +.Processes .cbi-section-table div.cbi-section-remove input, +.Startup .cbi-section-table input.cbi-input-remove, +.Startup .cbi-section-table div.cbi-section-remove input { + background-image: url("../resources/cbi/remove.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Processes .cbi-section-table input.cbi-input-reset, +.Processes .cbi-section-table input.cbi-button-reset, +.Startup .cbi-section-table input.cbi-input-reset, +.Startup .cbi-section-table input.cbi-button-reset { + background-image: url("../resources/cbi/reset.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Startup .cbi-section-table input.cbi-input-save, +.Startup .cbi-section-table input.cbi-button-save { + background-image: url("../resources/cbi/save.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.25; +} + +.close:hover { + color: #000000; + text-decoration: none; + opacity: 0.4; +} + +.alert-message { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #fceec1, #eedc94); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + border-radius: 4px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} + +.alert-message a { + font-weight: bold; + color: #404040; +} + +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #ffffff; +} + +.alert-message h5 { + line-height: 18px; +} + +.alert-message p { + margin-bottom: 0; +} + +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} + +.alert-message .btn { + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + border-radius: 3px; + text-shadow: none; +} + +a.label:link, +a.label:visited { + color: #ffffff; +} + +a.label:hover { + text-decoration: none; +} + +.label.important { + background-color: #c43c35; +} + +.label.warning { + background-color: #f89406; +} + +.label.success { + background-color: #46a546; +} + +.label.notice { + background-color: #62cffc; +} + +/* LuCI specific items */ +.hidden { display: none } + +#memtotal > div, +#memfree > div, +#memcache > div, +#membuff > div, +#conns > div { + border: 1px solid #CCCCCC; + border-radius: 3px 3px 3px 3px; + color: #808080; + display: inline-block; + font-size: 13px; + line-height: 18px; +} + +#xhr_poll_status { + cursor: pointer; +} + +form.inline { display: inline } + +header .pull-right { padding-top: 8px; } + +#modemenu li:last-child span.divider { display: none } + +#syslog { width: 100%; } + +.cbi-section-table tbody tr:nth-child(odd) td, .cbi-section-table tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} + +.cbi-section-table tbody tr:hover td, .cbi-section-table tbody tr:hover th { + background-color: #f5f5f5; +} + +.cbi-section-table tr.cbi-section-table-descr th { + font-weight: normal; +} + +.left { text-align: left !important; } + +.right { text-align: right !important; } + +.center { text-align: center !important; } + +.cbi-value-field { line-height: 1.5em; } + +.cbi-value-field input[type=checkbox], +.cbi-value-field input[type=radio] { + margin-top: 8px; + margin-right: 6px; +} + +table table td, +.cbi-value-field table td { + border: none; +} + +.table.cbi-section-table input, +.table.cbi-section-table textarea, +.table.cbi-section-table select { + width: auto; +} + +.table.cbi-section-table .td.cbi-section-table-cell { + white-space: nowrap; + text-align: right; +} + +.table.cbi-section-table .td.cbi-section-table-cell select { + width: inherit; +} + +.table.valign-middle .td { + vertical-align: middle; +} + +.cbi-value-description { display: inline; } + +.cbi-value-description img { vertical-align: middle; } + +.cbi-section-error { + border: 1px solid #FF0000; + border-radius: 3px; + background-color: #FCE6E6; + padding: 5px; +} + +.cbi-section-error ul { margin: 0 0 0 20px; } + +.cbi-section-error ul li { + color: #FF0000; + font-weight: bold; +} + +.ifacebox { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + margin: 0 10px; + text-align: center; + white-space: nowrap; + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + border-radius: 4px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; +} + +.ifacebox .ifacebox-head { + border-bottom: 1px solid #CCCCCC; + padding: 2px; + background: #eee; +} + +.ifacebox .ifacebox-head.active { + background: #90c0e0; +} + +.ifacebox .ifacebox-body { + padding: 6px; +} + +.ifacebadge { + display: inline-flex; + flex-direction: row; + white-space: nowrap; + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + padding: 2px; + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + border-radius: 4px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: default; + line-height: 1.2em; +} + +.ifacebadge img { + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: .25em; +} + +.ifacebadge-active { + border-color: #000000; + font-weight: bold; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: .5em; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; + text-align: left; +} + +.network-status-table .ifacebox-body > span { + flex: 10; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox-body .ifacebadge { + flex: 1; + margin: .5em .25em 0 .25em; + padding: .5em; + min-width: 220px; +} + +.zonebadge { + padding: 2px; + border-radius: 4px; + display: inline-block; + white-space: nowrap; + color: #666666; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + cursor: pointer; +} + +.zonebadge > em, +.zonebadge > strong { + margin: 0 2px; + display: inline-block; +} + +.zonebadge input { + width: 6em; +} + +.zonebadge > .ifacebadge { + margin-left: 2px; +} + +.zonebadge-empty { + border: 1px dashed #AAAAAA; + color: #AAAAAA; + font-style: italic; + font-size: smaller; +} + +div.cbi-value var, +.td.cbi-value-field var { + font-style: italic; + color: #0069D6; +} + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; + line-height: 19px; + white-space: pre; +} + +.uci-change-list var ins, +.uci-change-list var del { + display: inline; + /*border: none;*/ + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} + +html body.apply-overlay-active { + height: calc(100vh - 63px); +} diff --git a/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm b/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm index b796c6587..4933a2c2c 100644 --- a/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm +++ b/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm @@ -190,22 +190,20 @@
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -
+
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>

<%:No password set!%>

- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>
- "><%:Go to password configuration...%> +

<%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>

+
-
- <%- end -%> + <%- end -%> - + -
<% if category then render_tabmenu(category, cattree) end %> From 7359f8dfc89f19dbbaa8aa0a747e295780a0094b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 10:51:49 +0200 Subject: [PATCH 078/307] Remove garbage --- luci-base/src/po2lmo | Bin 18576 -> 0 bytes luci-base/src/po2lmo.o | Bin 6376 -> 0 bytes luci-base/src/template_lmo.o | Bin 7200 -> 0 bytes .../openmptcprouter/cascade.css.orig | 1970 ----------------- 4 files changed, 1970 deletions(-) delete mode 100755 luci-base/src/po2lmo delete mode 100644 luci-base/src/po2lmo.o delete mode 100644 luci-base/src/template_lmo.o delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig diff --git a/luci-base/src/po2lmo b/luci-base/src/po2lmo deleted file mode 100755 index a9535aeab49c4c334d439e4a3f62c733c9a96a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18576 zcmeHPeRx#WnLm?BAY#Y_M2%l%M6mcl2!aSAZ2}BjENDcqtcv59Og=Qpq>~v8wkUKm zmg$%_Z5OvyYq4wHKHc_Nwyl)1f&qL8b+tyf+H6<1d0cd746V_kOpxo}nf}Qs(FO#4c45Lxu25fOd>EGe@$Z zewi?|jsfB6($v^7Jlc(FyHRat=#UP~P*XmZjeqNP`3k8YGCqF!sdSmFdn49ByVi@9 zppZVJU|}eA`P=|I#`)(y6f(yItu1#fTrjt_VNPpHd%SB-*P?}U z7A~mjj8t7A%T52(U3J|CnUkqUzvP4GB@Ij-%XpQ2Y2do2K1+%3XAK2 zjfY?Eg8SjeKaQVYyXYTx!FRae-*&+}UGSwYc)bfg$)z67a?xkIj8{MRxZo)le1Qx8 zt_$Agg1_K`H@o21xU|0+S>ceTVs zb1c%{DjM6{Lb3X05eFG13uk7oD+adwpAnsBevQh6x9Qov~2;UBUY1yMm3O zmR1pO$1HRg&01R{^`fzJOMAU&YYTOV#&D!jG&Y4}opjR*Z*AeW&Txzz{uhnXsc2J% zK7Dte9+yZA2(Rg>XB^DNq9nqHdSflt{XCxX! zeDz(SU}H;rsI}!D2 ze}#lexNu0TP=gd9R3QK7MY?X|&%$BRpn3 zHvMG8r|=QI?izfz#;XhZmEi~H`lTV)7PCeY7;@mwew=aOoIA}k;=nI5An2$ApXI zItPx1v7e0&e3Fd{ak~TOoMfJ62VQ1C&<+QVj$uDt4!qn(h1ll6b(2f!4hL@f8U?)$ ze2T-*Hy!vH4t$pbpXR{7@4(M=;JY38*$#ZK1Fv-8eGdE_2Y%FnpXCvxXbjJ+Ysqtn zWd|g`jC>LKKFMEAod1CTekyqm zq3rFFpG2NRCtD}^BJvzE*&4}zFatb?O14_^?~>;b$@(S#7I_YhY=z`sC(j{~6_WoA zc@Bl_$VmXRULs#Xen|4qlAl6;K=OykbE?bsNq!%B4uR}$$^V!t{P8|8?^0^4Z%Z|7G&*>e)KUe~~=9c(z9J_mF4T&Q?o4N}gRh z>zDkU?7G>Jk68Y7^d`3EO%&H$i27{Jo zz_&+SGb3IOEYasl1&(LmhAs4jZ^s)lmGQ)HD75e$=u3>wh?OKpZ;h8E0>?eQ4vn6& zB5;=lj;l-tEYBg|9?y;<9ai=$aO+T4A>10j+<|?J3)cMbbq-x!gxD+x=4L;9CX}3! z4IF{DPbLD#JkoklRtjqU;{QRdFFxE^26#!}Io|_^&u?0`_`qF{p$oMxOjE$uNC(u!btRB$Ri~H!~00t_1Y35P%wO(X9+F;FB z*0GXI7)GkopwCn@%2fOq`rV)`H+x$KWBzIsW*?_c`g#3NC>e3&J$x%2rUf!ZXL|+G zbu2frn&KR|)CRFu8O_-?h*4?4GXN&qj(My^V6-B!^_aNtQM*%bKi*s;L~8#dPa})e zlf59$ipb3C>rZ|kAmSAL$sgLOpW3P2I%V}I`*O)aolHp2-Z;vXq;o6Lhj2M1U4UhQ zMQ=iFS*hevDcnyYVpTcq3Z?xH78PnQR@wtfn?%H?8g2N6%FFCeJ;@=+_Ho;PfU#3> z0V^4T7YYT%TJYOK!SLwVSoR?=2I+oT3Gpr3G2##Di2g|9)FC5Sd?>!&>gi!7&LFJR zFB!s*5nEz(EH(jiclq%7m}h3dP3Ctfm8xgrY+*vFfNpFoVdZ0Rwb6X^=H0d>j6-DTczGp z&`V40B}t}z-4$%IB*%s)Es6C_>)=o^J4#xP6CM2}e`G-75KVh2f%E#*wNkPVeNP)o7}&lvVRv=GmY5(R1K1AWkAsOJuV*loxa^gtY*<<_p$Pklrb$4rCAc0S0jLSx6oj?zr z&mKUs5 zoZ#=BXeG90M0}ETki8q75kj;cmY0KDj};AfSX^wd3&DW!?ddx>RGLCZ2xJuN8Srq; zlNv?iXaOoRng@qYpC33O*W42ahbra=KID3t2xN-WffENar^6H19=Ys%8EaT#v?#VI zG3t$#Cq_NK?j(9c_EC0;|1%)^8>*O>i;N*0K^CsDDHE~D z=_JKV$1uP*>jt#YfJc)51=w%(Bu79oC1gPQlgIFh>J!<=@sYVl_8~b507nH`s3FUP z{|9_O6TYAI%@Tegu=re)xn8PLVJ971o|g)h;#Z=RG8e0-&SRx^GI>P!SyzQH1_h({ z?U}m6k@*f8aze(4-A9rtm<}285?M&!1J{nxy(-dT>2>o}nV-H3kQ*SGrImOK-E=Af zMTDmW87s9CKVoDaqprPOa>z;zpjRta&DJl-!M>KewK6lDel}w7*0vw-LnT_N{d|cj zXrKP1e4~b-Ke-;CP!!nmY&6N9oqPjF&Cpg)?vLQj94n)*`+2mV7Mb0MdcnE*9drlj zIk8{*_jNxG-KVSJJ@XMFLpw7I^bVPmuX~4bMQ$IpjK9pMshyVE>7De&wII;TaVo*I~q;h1eLfZJBerrZm-8`*UcC+SI_$=}qp7t<;gH z31*@+vOQX z-**#RM@4KSx&dB|ROXl340Ar8oX%G3s64;R0#L>#cn^-H8PcaQ-5(f59SHprVQoKN zrzW?(velp54N@?A_;LW0R!9!yl5);d=uv}WCxs--T7!;=_i;T7o(~QKf$oK```^?+ zAV<{!ynu5fMHc%crSnhFdAbtrGylxE@s^>)GAm#AH17)r9aRa_6pR-#)>5M zqSbTecX2d#fX8vjQ4Qd4Nlm4KEr_l8d1|6oa+(onW`95g`vvOtSZ7$ugx}*qQNAH; zgc|oH+X^((J7r1LY_>XeR0VVav(bAV6;LSy(o-O+WhP&Suzh5PW`&t;7fntHQkJUA zp>it6;Ng5B>l1!LbemFvC-yUb;Y(hDZtu`}ZJ6wtn|*$kQC6NBfht+DNeW7CBSEX; z?OrRDd)`A5toL;k zR_>`jToO1IpLVL&@SJpjvdvTE7(WNmsjP;-!6c8DMuvB=GG+WKN}gd^sE4De_%k?< z*o$+p-6+dZ!85#)Ba>CTOxk-Am6`n(N|E0146;6|=7jlpRY?V2h2|sF#I%9B7#eO) zZvYk;Qc7>b7BKdf*nh@qD6rBSS$n9BQgo!fs9{XPJ=46v5CIn{h{_=PHbs~K1G`fd zxmt&P&1~ibmqQ}{HPzIKXDqY%Rc9=Nn3Z(Jmz*e*ZJfzIEC&&5cvMneT$j z5fNi+Lxqb)V1$dtF#4Tp7AsZq4|JwjRbW3j6BOoEq!D`(FA7Mb)0ja2T^d33%70_~ zKV5O~Z+q62c(8!*jxMA)u~_C-n2UPe(i?Z)JL^AA)eJ&%9GokIixqPxrC>t zrI}mc(mME&H+J5<|L{#0Yf>MqNxi=!^>*#pv{$XfVUM-=wfI~7&f=C$wYS!8s=ci? zh%;DmICnHG&zIq=(lJr5m|2Q_Xd1*m%|h2py$eT`R_dfYh|OB4x=aH3vugQ03355i z4v)tpzmF9n5RFEnSNmsmPEz=W&QMdByuYQrBOa^ji1;J%7*nlnkx61DzC{l=_+t^j z{65={@46utQE|6u>uhRi@Xru8ZfTE&y8QSGJQ9Tyzr-oUm*x;(ACLJXjedN)9*J%d zvpU74RkJ$j9O=1W8QXc@C4Hd$@?gcAV`F8Q`(r4}0?=;ISAl;eJ2tik{9({m&{5C_ zK(9f^{2}NI7?r;Qor=lu1nB2Lr(sc=g2iP4=pgp3w}NiL8`>8@r{lcf5zx%&*w|B` zH{osZRnR|SQvMM1W^6~#=kW?o5w8J#8MFcPaSWnv&|-9q=Rl`{9wUV+AJ0AOgr}>* zb6(lR(q7NR3gY|{V;7p`GAih2e0?EiLQehaH^#=Q5r-(RSXo|qt?%@^OSg$npS$GJ z`7>wG1?^YhZxQ@rD{DWry%m2~qu#D0T3cRmf6?;EoJjdl{ssJ9|1t7MAa8)2{%!mF zP$003?lU&@|Pj+$4YDaw-Cp^lDs(BUt-v+J_c&*c^{F%G9UJ%_psZ4B2WI9 zEocAwJYLCu!S*oq>3yb%nb7_@$Y-KIwIglIi(2e*9EUs#`QPW+KWf{T0e=tuFqCJ1 zt8ITdJ=T8N-KcN#&($oj(q+wf~y9s%BTVCxx8v6S|I)<# zj=eD7Bf1~FqUoEOzOU&7-9gUM^kPjHYPwR>n>20IbhD=SYx&L~t_PBAVaiQJ8+4kCzHF9`fc7bK$6u?d@c{j@EDx)B=H7~bHB)k^E>hHYh1n)0J}uvOZ1OvfP)i88H&)4U^KMR|w=+$PwVlv_J^LX`e*aiQs3;vD^J`wfC_**Yh zIm&l4B+rz%i6TcYb-|aq;9qjd_XZdJCKvpE7yMhm*)E0c{)CJEzqsJf1NY~OX{Y#( zIHl-pVb)C}$PyR1dAnE(MqT`uVWTu&J6`C5FO>LXacH`7EZ@nIT&3{}Js#ydF!0a1 z__<5#uh)Lsb)0dHuh3JmJad3-GyW~na5oGJn4e}68O0HpE@E} z;Bd66UNp3XMVzOzLf!+yb*NZ0R3F3j9$YDE61eyjY-w)@cPVi&j(bM)uh5JV#KLVI zt)W;rs2t*xcaIu^*qq`hHVE^USTGcghPD7|5Wy9Hb6xG))ywlG@?H`kT-Xc-tl-LZ zwQB=GYsESdT(#!kz zE>eYBBTa(Wnrdpy1teZOQn$78F_e~fyz;@1y9C9YG` zcHEw74s|x`+h6&b`tnyki12XTD<3Pog_e^pkay2=JPU2EdF7*w2hH8y$@VkX-||)D z&A5C>U17_|%;mUz^ps0y`C@r7E*}a8SyAe8nYq@MufZ#I`AFe~v|vML1Qp!gz{_f@ zuZOdSmiAyAm-qCwxk7V!=Pe)9R{--tR#$5z)L?fmM>k|I*Z25NHBz_yIvbl+yX%XB z`Fg?N9i5%J;OdfJzFgkflO2fn5bY4;Wy5?;4#XhFaLZN+>xoF`Yw&7h zKBDd$=3~L&`nAi0f$LTTKkhQ1ylq%$=)9+xFGG*V|M?j1HRkR^=0x-L)yNzoFBevI zZfT2!?hsY*qiC~9VGavNJ497`Bo?l!UAB5oEYu{bn%d)4a#&V1Y-xwFkQA3RrDStB z+Sw9m&trm+MZ>KjD(X~6YfMzhzEFi^RZ|3P40EcelJitmG$JR0s&I3#F&b(M2b&w< z#Bj<~O_s{Sq>)3Yt)(8>NAT?#Gf{rfXGB$fq^%9J?Ktbm{}4c$!SXcR!;E&}r_U2q|IWVdidviW$s5uXWihSt9`FsWp&)$r^IqxuZomMvS8$Cle zLe8^1!<%yvLu<5sVf-2vO-RtUu{Y-@hMMz4lYe3PKd0@NX@}-~(ol1rNqf9)o>G76 zeOCXQ3Xq%gTtm&dr*bt5(4%eV{gt?%)g&9#LB_L@x#a1nRZM9ql&RN=V*g-shxkPn!K?$l;J`ymLN_U65KHYY|rCQilW><#}W5{$*fZ|;LH()NC%sA(ZT44nDv zaJ3e`|JU~VHPpsUah%ljJzEKhjVAv|3gtS(cTiJrX8z^)FtIC5_1VRV9nb3p9oFQl Uqkkb zGdpuP-rVLxdCt2t^Lw6o=9%~PDWk8qNz<4VjXlWfB}o}Ox2B%&=Gku6##&jw>3m=o z7CKDlMAdX#NMpMFRkL&-&pMM6l+MxXGWq4X&r(U}EjjkzO{ag(biO`gy7VCLg1JW3 zbS8NtX0dFynxzM*>AC*J#l^8VuTsN@5bjnunKm7J%ISY=(wHTaNrTs#G!|gGDB%1$ z#9TPBuxNL>#;h5iLIcyLHWfb4c6QqBV1=^g7z^_s!2|4A_^A(gZcekm;jat{Ptj23k^FfiLzU^wh6?lj7R``ckK3!a-Q5k86$&{R! zO3MTdu~~Ry>$e}}Q-ayRRN9zEW6os`=Fl}}D02<-xx=`YU&d=xR(r)KmQC;uweYni zToe{`=fnbe88F@Et_|q12~V5LuCX9ubBuprq0E>iq|P5NkdI5v+-`F2`Tt^ppxNqx zxy7q(weSVuEgGzuO%$bL&tlz8^M2E6n=?yo+tHZ|9l{S1#yQ%q93h7;%Kcbu?;whU z)Nf+l&2{)d4KA<44K>(WhqnM0(zBXbFsdDe6SM5p^R-2NdSS4eG3VlQm(hgt>KGDr zAm%ogCyVC*DZt6%%eCCEYPnZL&YUck>)C0MEpX2v8+|I0bF)xJxU9a>y-nv7f5Vj* zDPdNmZr#z)ddjn=gxRa4HT+_<{`4O-Q!36tcY$GmFH!7r6_Mf(L5lYqDdv9?!X~}Q z2f;or9A6jz6{*;E#XfA7O4NuNgz5aALihz@D^wS)n~G(ty|P}OGar6}vxAQ_t*){8 zjYzz56Uy^Cie3bo)#hcI!o~B{Ew7(93ddR@YS=p|F7&ZMT(@~~*==5{w7kbE4|@f4 zpH&{Bx*s*H`yPTvpX}Cp#FcesXi5&DRZy2J-Ej)m!FCZvio-e3?2gl>71TMfoQCFo04zp~DdX{wbLRkVy``$FKJc&U z!c0h;c8aw5UH&%X2y>k8Mp@ZAA<6$~MCX}l{N(V~2em5Zr}6egbd42gwSmGN=SK&c zhyD_6c-c2x<>6w_HLOm)d$p6dVi>rw=sf8=p%-0nOEh1wp;7ks>;0clZGP;Xe9+~+ zkp1N+^TfY-1wH_BM8$W6TU2SK3w~9A;uy77DDx9eRQ3hPZz|J$bPm_cdVV>H>%~0% z2A$iu2x&MOGjh3XZoA%HN{ufZoXt9nV;?5j{bU;Y8=0w0SEB^?uvZvq?RjNN01$8QZ&i z_jY~5-bBXAX7&3cTOynE;mwgvcY1loR(oMF?Yjq=HqxQ3YhAW{3|nL^_YE;^)t@E~IZLma{#mZqfvUtIlk|xz^(JDt(Bd`1wb#EWlXa4f}cfMN{B6!*(GU+(F(X;LX1|`Qt3mHzQO!* z2%r&91@OlM_!9yAL;xQR;7uP~Qwx6BgCNA0_b^ zO3A_KU@Sk#a*5c`P&UqzM-x__B@@{sOXASaWLYwQJOdsd%I49<%up(GjD;~CB(%+F z+;J&#p?yq3oK6eL?;r@FlVuei$u|>(5WfYF5Zw%n)6#jX|{#}LNs_+i6@5ujJg@*`0s2YuD4;3Ic z3r-1*xr}GC&wdXXL$(Fj+X`O?JL%_40RL$Kzbd$lvzNEZ*zXj3x*w(gmEtOq_WOkW zK_4Fw{1L&)o$BYG3jc!Q|7+stCVQ2iQMfvfFDU$ril6feSMA?axN5&bTrt${mlQue zg3JDp)!v2;Q-`%41ZjpOP z%#T!%ttzy3X|B6fi2Rhea9$xLWF;P|E0zsEGl_pyaB-Xx;_|ewUCI6J-wg%%{D14y zeMUajHHIP^6YZa(f+8}0iMAm_^*2c%(lB)xqVsqCCF7TA4^%Q=w_1T!|oclK&`VpYQ#6 zK0o|4q+RQGcc1Ui``-7yckLl-*PTs~2-7XXzRYSfjWRa7wl?k(!!EXxtzf;}{TFu+ zmfg`g&zf_sOU}VL_V_aH94xcZ)}zEZ|1Bs4(V309R`t}uxu(i6_pCB^N|D%WEcROI z)NG4;njkri%tWk9ileCk7oaB1d1`j~7VDC0UG}U?r)Jx?SeM}gcdT+V0p;b;{U3gqoIXsa0^X za;;wdi4vy5RI6k-SJpsOODxeyvqngV5V}SqOC|Eq@5Kf^d9kw{YjlsFe}8e&ef1rD z`?%M9vvXYNkBz+u-jki+lHR()1hPX|ij5tXs%UnMxU@dCHo@&pk}elJVNKAv7NFbH zqDCG&0VT}z!I_Tuj374!$Xby0mMnW+EpDm%4REn;cjgV!c8osUJ$sTs<+?V_-JZ2d zl6zfixroVW;+N{U=hKB|?v$I6j2>K65u%9KY;P4i5ObcYSK$emM+~!u!?y^ki-QK` zr^?O#dflGpFh5LHam6%02CEa5)``lpiAwWCB{Ctmj_t?E6>(R2rnbz!*Vm4vtAoljX+#DGos$EHUXx1&@m+*gmF3!EODloC*q!f>WGq^hCNX+89cQjv^f zv81oD^+-z`1X9mpV}FqcfoA^Ec7+x22xGCaSHN>}E%fWNL^ePcreb5yNEI|YMqI(O zB)Gjv>CHJleieCoVkthbDE2^|I>|C#oE6UaoQO(2=lrh-@k9XlIKPrhkz+u?_$R%N zVkuU9BEacQij~T0_7!)UyS^DFqHj8+?+BHNuBg0Nw}`gg0T1NTL`fhJC$xr&QVxXb z1qD*Og*%6K4tl6#vEmoxsjTDiM3A%vw}(!kFy<~1tMp`tU2UtUh^sPn;(VB1!mK3gN0Jn zT0q{nSCDsdTe!|zF_jCBgQ%TCUBy_}MM@Fh(Z2~Did5MkXVC9!hDr)jtoU_=8?}_O zhOvzWc5`B5Au*KAWBhqc+0Gq1ZjX2D%;fBRK7LzbOQJJAygAW%lN?Jiwnp`l$L?j3 z{q2!;E0(oPpuVjKPCsfdV9vVR+P~AZW98E5vk|Ze+8u(**h_Wv7kv7IivA|O3w-%A zOgX>BdK}ngMgOZwx14Cx zTY`lVPn_0<_BMTdAEzY)VIhsgn%M{9k_xg!8~#g;u_*pDYEfuv)S^tJY#oX2jwa}T z>Iw;qwJVM&TUN)bCsBrgH)v5tC9b}0z;w0YzsL<>9SYZTkrTjf!;gFlw%q_4;SYr1 zL%_-IP8A}NQ@}<;_=iLA$3pNYL-4~P`1eEbXF~9oLvSjWjpFcp2>uJ;6o+=THR9|5 zdj-E$MxN*$J+5#)*Zn!A=W(S+oH1Y*6n>q`pA_cQ{)1m5KR*n?m*N04;%^JVuMWXC zgy1&doqb$I~8(Hu?sM=}{{d?;VY zF!C~)PT8rU{38W9OQr3>eHjf3-l2S|uMS8Lq;ikcc*u#q!4X!-4UY`w?0(h{TXuSY zjbu`NL`ah{!C{Z&(%E65)gDRZ3KXiEKfV#xMzt7?D$+{)F4GGNZEFbrP6)n9ons=? zR%t!m3Mc(-2L7ypQ(kHQ69&G@!2fRGs}1}LRZ6M5(!jSHINga_e<}q3k%3=j@Xs3f z)doJPN;Q!`W#AVKe64|hVBpsnc&j?Eq{ocUR}I|MlQwYEZr;F6{r^xn?aQ@>-4=Cq zkX^b1bbM|!a5K)m25!bVt8mg!OVoM}8T@er|8am{X4~T8%OU(T27aBP=c9lgT?gCM zfYxQ&-Jo#t6aS;;`}v5$f4zZw2L2fX|DmC0oq_*41plppuQ&Mr5Q5JuocuTKHmUke zxVgXU4BX70PKDEYO+W88_-`=$dC1^5{e0KpH}n54RgX!($^T6QUvB8P4cz2EqHtQ5 zssF7Id<`i@3$E){g_9n0U8xZM?;7~0A*1v5XNDd#&T;TiBfIp|txF9wuHQ=!2XOt) zc_M)8d;j?WuJ7?u0N3~UYyj8qLtLSvX@B&6dP4x$_bE#h4rJ}rUi9{e><9E{Br}vs z*qQw{OZ4IDVu`(l0!xhK)l+c>C^x!%L=N^-kwfcH^_kL+WYsZbRC}p?7C*w(HAIkT ztt<4Xz7N{}9LS_IDBrH+gKsNsUu)fr0qHbzk7!z6ErTG@g7&upC9G4D{qOb4e%wdo zK+EfXJ77IFS+{?}^?yyt2mR+tzAKCuDsOSLhSMwA0Vc`Ad!y#vHL>5+oAGvI$HI*h diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig deleted file mode 100644 index 4a40f6d68..000000000 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css.orig +++ /dev/null @@ -1,1970 +0,0 @@ -/*! - * LuCI Bootstrap Theme - * Copyright 2012 Nut & Bolt - * By David Menting - * Based on Bootstrap v1.4.0 - * - * Copyright 2011 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -/* Reset.less - * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). - * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ -html { - margin: 0; - padding: 0; -} - -body { - margin: 0; - padding: 5px; -} - -h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, q, s, -small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, -form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, -.table, .tbody, .tfoot, .thead, .tr, .th, .td { - margin: 0; - padding: 0; - border: 0; - font-weight: normal; - font-style: normal; - font-size: 100%; - line-height: 1; - font-family: inherit; -} - -abbr[title], acronym[title] { - border-bottom: 1px dotted; - cursor: help; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -ol, ul { - list-style: none; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -html { - overflow-y: scroll; - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted; -} - -a:hover, a:active { - outline: 0; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - border: 0; - -ms-interpolation-mode: bicubic; -} - -button, -input, -select, -option, -textarea { - font-size: 100%; - margin: 0; - box-sizing: border-box; - vertical-align: baseline; - *vertical-align: middle; -} - -button, input { - line-height: normal; - *overflow: visible; -} - -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0; -} - -button, -input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -button[disabled], -input[type="button"][disabled], -input[type="reset"][disabled], -input[type="submit"][disabled] { - opacity: 0.7; -} - -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} - -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -/* - * Scaffolding - * Basic and global styles for generating a grid system, structural layout, and page templates - * ------------------------------------------------------------------------------------------- */ -body { - background-color: #ffffff; - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 18px; - color: #404040; - padding-top: 58px; -} - -.container { - width: 100%; - max-width: 940px; - margin-left: auto; - margin-right: auto; - zoom: 1; -} - -.container:before, .container:after { - display: table; - content: ""; - zoom: 1; -} - -.container:after { - clear: both; -} - -a { - color: #0069d6; - text-decoration: none; - line-height: inherit; - font-weight: inherit; -} - -a:hover { - color: #00438a; - text-decoration: underline; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -/* Typography.less - * Headings, body text, lists, code, and more for a versatile and durable typography system - * ---------------------------------------------------------------------------------------- */ -p, -.cbi-map-descr, -.cbi-section-descr { - font-size: 13px; - font-weight: normal; - line-height: 18px; - margin-bottom: 9px; -} - -p small { - font-size: 11px; - color: #bfbfbf; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: bold; - color: #404040; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - color: #bfbfbf; -} - -h1 { - margin-bottom: 18px; - font-size: 30px; - line-height: 36px; -} - -h1 small { - font-size: 18px; -} - -h2 { - font-size: 24px; - line-height: 36px; -} - -h2 small { - font-size: 14px; -} - -h3, -h4, -h5, -h6 { - line-height: 36px; -} - -h3 { - font-size: 18px; -} - -h3 small { - font-size: 14px; -} - -h4 { - font-size: 16px; -} - -h4 small { - font-size: 12px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 13px; - color: #bfbfbf; - text-transform: uppercase; -} - -ul, ol { - margin: 0 0 18px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -ul { - list-style: disc; -} - -ol { - list-style: decimal; -} - -li { - line-height: 18px; - color: #808080; -} - -ul.unstyled { - list-style: none; - margin-left: 0; -} - -dl { - margin-bottom: 18px; -} - -dl dt, dl dd { - line-height: 18px; -} - -dl dt { - font-weight: bold; -} - -dl dd { - margin-left: 9px; -} - -hr { - margin: 20px 0 19px; - border: 0; - border-bottom: 1px solid #eee; -} - -strong { - font-style: inherit; - font-weight: bold; -} - -em { - font-style: italic; - font-weight: inherit; - line-height: inherit; -} - -small { font-size: 0.9em } - -address { - display: block; - line-height: 18px; - margin-bottom: 18px; -} - -code, pre { - padding: 0 3px 2px; - font-family: Monaco, Andale Mono, Courier New, monospace; - font-size: 12px; - border-radius: 3px; -} - -code { - background-color: #fee9cc; - color: rgba(0, 0, 0, 0.75); - padding: 1px 3px; -} - -pre { - background-color: #f5f5f5; - display: block; - padding: 8.5px; - margin: 0 0 18px; - line-height: 18px; - font-size: 12px; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 3px; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -/* Forms.less - * Base styles for various input types, form layouts, and states - * ------------------------------------------------------------- */ -form { - margin-bottom: 18px; -} - -fieldset { - margin-bottom: 9px; - padding-top: 9px; -} - -fieldset legend { - display: block; - font-size: 19.5px; - line-height: 1; - color: #404040; - padding-top: 20px; - *padding: 0 0 5px 0px; - /* IE6-7 */ - - *line-height: 1.5; - /* IE6-7 */ - -} -form .cbi-tab-descr { - line-height: 18px; - margin-bottom: 18px; -} - -form .clearfix, -form .cbi-value { - margin-bottom: 18px; - zoom: 1; -} - -form .clearfix:before, form .clearfix:after, -form .cbi-value:before, form .cbi-value:after { - display: table; - content: ""; - zoom: 1; -} - -form .clearfix:after, -form .cbi-value:after { - clear: both; -} - -label, -input, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: normal; -} - -form .input, -form .cbi-value-field { - margin-left: 200px; -} - -form .cbi-value label.cbi-value-title { - padding-top: 6px; - font-size: 13px; - line-height: 18px; - float: left; - width: 180px; - text-align: right; - color: #404040; -} - -input[type=checkbox], input[type=radio] { - cursor: pointer; -} - -input, -textarea, -select, -.cbi-dropdown, -.uneditable-input { - display: inline-block; - width: 210px; - height: 30px; - padding: 4px; - font-size: 13px; - line-height: 18px; - color: #808080; - border: 1px solid #ccc; - border-radius: 3px; - box-sizing: border-box; -} - -.cbi-dropdown { - min-width: 210px; - max-width: 400px; - width: auto; -} - -select { - padding: initial; - background: #fff; - box-shadow: inset 0 -1px 3px rgba(0, 0, 0, 0.1); -} - -input[type=checkbox], input[type=radio] { - width: auto; - height: auto; - padding: 0; - margin: 3px 0; - *margin-top: 0; - /* IE6-7 */ - - line-height: normal; - border: none; -} - -input[type=file] { - background-color: #ffffff; - padding: initial; - border: initial; - line-height: initial; - box-shadow: none; - width: auto !important; -} - -input[type=button], input[type=reset], input[type=submit] { - width: auto; - height: auto; -} - -select, input[type=file] { - *height: auto; - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ -} - -select[multiple] { - height: inherit; - background-color: #ffffff; -} - -textarea { - height: auto; -} - -.uneditable-input { - background-color: #ffffff; - display: block; - border-color: #eee; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} - -::-moz-placeholder { - color: #bfbfbf; -} - -::-webkit-input-placeholder { - color: #bfbfbf; -} - -input, textarea { - transition: border linear 0.2s, box-shadow linear 0.2s; - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); -} - -input:focus, textarea:focus { - outline: 0; - border-color: rgba(82, 168, 236, 0.8); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type=file]:focus, input[type=checkbox]:focus, select:focus { - box-shadow: none; - outline: 1px dotted #666; -} - -form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { - color: #b94a48; -} - -form .clearfix.error input, form .clearfix.error textarea { - color: #b94a48; - border-color: #ee5f5b; -} - -form .clearfix.error input:focus, form .clearfix.error textarea:focus { - border-color: #e9322d; - box-shadow: 0 0 6px #f8b9b7; -} - -form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { - color: #b94a48; - background-color: #fce6e6; - border-color: #b94a48; -} - -form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { - color: #c09853; -} - -form .clearfix.warning input, form .clearfix.warning textarea { - color: #c09853; - border-color: #ccae64; -} - -form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { - border-color: #be9a3f; - box-shadow: 0 0 6px #e5d6b1; -} - -form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { - color: #c09853; - background-color: #d2b877; - border-color: #c09853; -} - -form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { - color: #468847; -} - -form .clearfix.success input, form .clearfix.success textarea { - color: #468847; - border-color: #57a957; -} - -form .clearfix.success input:focus, form .clearfix.success textarea:focus { - border-color: #458845; - box-shadow: 0 0 6px #9acc9a; -} - -form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { - color: #468847; - background-color: #bcddbc; - border-color: #468847; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - background-color: #f5f5f5; - border-color: #ddd; -} - -.actions, -.cbi-page-actions { - background: #f5f5f5; - margin-bottom: 18px; - padding: 17px 20px 18px 17px; - border-top: 1px solid #ddd; - border-radius: 0 0 3px 3px; - text-align: right; -} - -.actions .secondary-action, -.cbi-page-actions .secondary-action{ - float: right; -} - -.actions .secondary-action a, -.cbi-page-actions .secondary-action a { - line-height: 30px; -} - -.actions .secondary-action a:hover, -.cbi-page-actions .secondary-action a:hover { - text-decoration: underline; -} - -.help-inline, .help-block { - font-size: 13px; - line-height: 18px; - color: #bfbfbf; -} - -.help-inline { - padding-left: 5px; - *position: relative; - /* IE6-7 */ - - *top: -5px; - /* IE6-7 */ - -} - -.help-block { - display: block; - max-width: 600px; -} - -/* - * Tables.less - * Tables for, you guessed it, tabular data - * ---------------------------------------- */ -.tr { display: table-row; } -.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } -.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } - -.table { - display: table; - width: 100%; - margin-bottom: 18px; - padding: 0; - font-size: 13px; - border-collapse: collapse; -} - -.table .th, .table .td { - display: table-cell; - vertical-align: middle; /* Fixme */ - padding: 10px 10px 9px; - line-height: 18px; - text-align: left; -} - -.table .th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; -} - -.table .td { - vertical-align: top; - border-top: 1px solid #ddd; -} - -.table .tbody .th { - border-top: 1px solid #ddd; - vertical-align: top; -} - -/* Patterns.less - * Repeatable UI elements outside the base styles provided from the scaffolding - * ---------------------------------------------------------------------------- */ -header { - height: 40px; - position: fixed; - top: 0; - left: 0; - right: 0; - z-index: 10000; - overflow: visible; - color: #BFBFBF; -} - -header a { - color: #bfbfbf; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -header h3 a:hover, header .brand:hover, header ul .active > a { - background-color: #333; - background-color: rgba(255, 255, 255, 0.05); - color: #ffffff; - text-decoration: none; -} - -header h3 { - position: relative; -} - -header h3 a, header .brand { - float: left; - display: block; - padding: 8px 20px 12px; - margin-left: -20px; - color: #ffffff; - font-size: 20px; - font-weight: 200; - line-height: 1; -} - -header p { - margin: 0; - line-height: 40px; -} - -header .fill { - background-color: #222; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #333333, #222222); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - padding: 0 5px; -} - -header div > ul, .nav { - display: block; - float: left; - margin: 0 10px 0 0; - position: relative; - left: 0; -} - -header div > ul > li, .nav > li { - display: block; - float: left; -} - -header div > ul a, .nav a { - display: block; - float: none; - padding: 10px 10px 11px; - line-height: 19px; - text-decoration: none; -} - -header div > ul a:hover, .nav a:hover { - color: #ffffff; - text-decoration: none; -} - -header div > ul .active > a, .nav .active > a { - background-color: #222; - background-color: rgba(0, 0, 0, 0.5); -} - -header div > ul.secondary-nav, .nav.secondary-nav { - float: right; - margin-left: 10px; - margin-right: 0; -} - -header div > ul.secondary-nav .menu-dropdown, -.nav.secondary-nav .menu-dropdown, -header div > ul.secondary-nav .dropdown-menu, -.nav.secondary-nav .dropdown-menu { - right: 0; - border: 0; -} - -header div > ul a.menu:hover, -.nav a.menu:hover, -header div > ul li.open .menu, -.nav li.open .menu, -header div > ul .dropdown-toggle:hover, -.nav .dropdown-toggle:hover, -header div > ul .dropdown.open .dropdown-toggle, -.nav .dropdown.open .dropdown-toggle { - background: #444; - background: rgba(255, 255, 255, 0.05); -} - -header div > ul .menu-dropdown, -.nav .menu-dropdown, -header div > ul .dropdown-menu, -.nav .dropdown-menu { - background-color: #333; -} - -header div > ul .menu-dropdown a.menu, -.nav .menu-dropdown a.menu, -header div > ul .dropdown-menu a.menu, -.nav .dropdown-menu a.menu, -header div > ul .menu-dropdown .dropdown-toggle, -.nav .menu-dropdown .dropdown-toggle, -header div > ul .dropdown-menu .dropdown-toggle, -.nav .dropdown-menu .dropdown-toggle { - color: #ffffff; -} - -header div > ul .menu-dropdown a.menu.open, -.nav .menu-dropdown a.menu.open, -header div > ul .dropdown-menu a.menu.open, -.nav .dropdown-menu a.menu.open, -header div > ul .menu-dropdown .dropdown-toggle.open, -.nav .menu-dropdown .dropdown-toggle.open, -header div > ul .dropdown-menu .dropdown-toggle.open, -.nav .dropdown-menu .dropdown-toggle.open { - background: #444; - background: rgba(255, 255, 255, 0.05); -} - -header div > ul .menu-dropdown li a, -.nav .menu-dropdown li a, -header div > ul .dropdown-menu li a, -.nav .dropdown-menu li a { - color: #999; - text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); -} - -header div > ul .menu-dropdown li a:hover, -.nav .menu-dropdown li a:hover, -header div > ul .dropdown-menu li a:hover, -.nav .dropdown-menu li a:hover { - background-color: #191919; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #292929, #191919); - color: #ffffff; -} - -header div > ul .menu-dropdown .active a, -.nav .menu-dropdown .active a, -header div > ul .dropdown-menu .active a, -.nav .dropdown-menu .active a { - color: #ffffff; -} - -header div > ul .menu-dropdown .divider, -.nav .menu-dropdown .divider, -header div > ul .dropdown-menu .divider, -.nav .dropdown-menu .divider { - background-color: #222; - border-color: #444; -} - -header ul .menu-dropdown li a, header ul .dropdown-menu li a { - padding: 4px 15px; -} - -li.menu, .dropdown { - position: relative; -} - -a.menu:after, .dropdown-toggle:after { - width: 0; - height: 0; - display: inline-block; - content: "↓"; - text-indent: -99999px; - vertical-align: top; - margin-top: 8px; - margin-left: 4px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #ffffff; - opacity: 0.5; -} - -.menu-dropdown, .dropdown-menu { - background-color: #ffffff; - float: left; - position: absolute; - top: 40px; - left: -9999px; - z-index: 900; - min-width: 160px; - max-width: 220px; - _width: 160px; - margin-left: 0; - margin-right: 0; - padding: 6px 0; - zoom: 1; - border-color: #999; - border-color: rgba(0, 0, 0, 0.2); - border-style: solid; - border-width: 0 1px 1px; - border-radius: 0 0 6px 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - background-clip: padding-box; -} - -.menu-dropdown li, .dropdown-menu li { - float: none; - display: block; - background-color: transparent; -} - -.menu-dropdown .divider, .dropdown-menu .divider { - height: 1px; - margin: 5px 0; - overflow: hidden; - background-color: #eee; - border-bottom: 1px solid #ffffff; -} - -header .dropdown-menu a, .dropdown-menu a { - display: block; - padding: 4px 15px; - clear: both; - font-weight: normal; - line-height: 18px; - color: #808080; - text-shadow: 0 1px 0 #ffffff; -} - -header .dropdown-menu a:hover, -.dropdown-menu a:hover, -header .dropdown-menu a.hover, -.dropdown-menu a.hover { - background-color: #dddddd; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #eeeeee, #dddddd); - color: #404040; - text-decoration: none; - box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); -} - -.open .menu, -.dropdown.open .menu, -.open .dropdown-toggle, -.dropdown.open .dropdown-toggle { - color: #ffffff; - background: #ccc; - background: rgba(0, 0, 0, 0.3); -} - -.open .menu-dropdown, -.dropdown.open .menu-dropdown, -.open .dropdown-menu, -.dropdown.open .dropdown-menu { - left: 0; -} - -.dropdown:hover ul.dropdown-menu { - left: 0; -} - -.dropdown-menu .dropdown-menu { - position: absolute; - left: 159px; -} - -.dropdown-menu li { - position: relative; -} - -.tabs, .cbi-tabmenu { - margin: 0 0 18px; - padding: 0; - list-style: none; - zoom: 1; -} - -.tabs:before, -.cbi-tabmenu:before, -.tabs:after, -.cbi-tabmenu:after { - display: table; - content: ""; - zoom: 1; -} - -.tabs:after, .cbi-tabmenu:after { - clear: both; -} - -.tabs > li, .cbi-tabmenu > li { - float: left; -} - -.tabs > li > a, .cbi-tabmenu > li > a { - display: block; -} - -.tabs, -.cbi-tabmenu { - border-color: #ddd; - border-style: solid; - border-width: 0 0 1px; -} - -.tabs > li, -.cbi-tabmenu > li { - position: relative; - margin-bottom: -1px; -} - -.cbi-tabmenu.map { - margin: 0; -} - -.cbi-tabmenu.map > li { - font-size: 16.5px; - font-weight: bold; -} - -.cbi-tabcontainer > fieldset.cbi-section[id] > legend { - display: none; -} - -.tabs > li > a, -.cbi-tabmenu > li > a { - padding: 0 15px; - margin-right: 2px; - line-height: 34px; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} - -.tabs > li > a:hover, -.cbi-tabmenu > li > a:hover { - text-decoration: none; - background-color: #eee; - border-color: #eee #eee #ddd; -} - -.tabs .active > a, .tabs .active > a:hover, -.cbi-tabmenu .active > a, .cbi-tabmenu .active > a:hover, -.cbi-tab > a:link, .cbi-tab > a:hover { - color: #808080; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} - -.tabs .menu-dropdown, .tabs .dropdown-menu, -.cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { - top: 35px; - border-width: 1px; - border-radius: 0 6px 6px 6px; -} - -.tabs a.menu:after, .tabs .dropdown-toggle:after, -.cbi-tabmenu a.menu:after, .cbi-tabmenu .dropdown-toggle:after { - border-top-color: #999; - margin-top: 15px; - margin-left: 5px; -} - -.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle, -.cbi-tabmenu li.open.menu .menu, .cbi-tabmenu .open.dropdown .dropdown-toggle { - border-color: #999; -} - -.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after, -.cbi-tabmenu li.open a.menu:after, .cbi-tabmenu .dropdown.open .dropdown-toggle:after { - border-top-color: #555; -} - -.tab-content > .tab-pane, -.tab-content > div { - display: none; -} - -.tab-content > .active { - display: block; -} - -.breadcrumb { - padding: 7px 14px; - margin: 0 0 18px; - background-color: #f5f5f5; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #ffffff, #f5f5f5); - border: 1px solid #ddd; - border-radius: 3px; - box-shadow: inset 0 1px 0 #ffffff; -} - -.breadcrumb li { - display: inline; - text-shadow: 0 1px 0 #ffffff; -} - -.breadcrumb .divider { - padding: 0 5px; - color: #bfbfbf; -} - -.breadcrumb .active a { - color: #404040; -} - -footer { - margin-top: 17px; - padding-top: 17px; - border-top: 1px solid #eee; -} - -.btn.danger, -.alert-message.danger, -.btn.danger:hover, -.alert-message.danger:hover, -.btn.error, -.alert-message.error, -.btn.error:hover, -.alert-message.error:hover, -.btn.success, -.alert-message.success, -.btn.success:hover, -.alert-message.success:hover, -.btn.info, -.alert-message.info, -.btn.info:hover, -.alert-message.info:hover { - color: #ffffff; -} - -.btn .close, .alert-message .close { - font-family: Arial, sans-serif; - line-height: 18px; -} - -.btn.danger, -.alert-message.danger, -.btn.error, -.alert-message.error { - background-color: #c43c35; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #c43c35 #c43c35 #882a25; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.btn.success, .alert-message.success { - background-color: #57a957; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #62c462, #57a957); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #57a957 #57a957 #3d773d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.btn.info, .alert-message.info { - background-color: #339bb9; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #339bb9 #339bb9 #22697d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.btn, -.cbi-button { - cursor: pointer; - display: inline-block; - background-color: #e6e6e6; - background-repeat: no-repeat; - background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - padding: 5px 14px 6px; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - color: #333; - font-size: 13px; - line-height: normal; - border: 1px solid #ccc; - border-bottom-color: #bbb; - border-radius: 4px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.cbi-button:hover { - color: #333; - text-decoration: none; -} - -.btn:focus, -.cbi-button:focus { - outline: 1px dotted #666; -} - -.btn.primary, -.cbi-page-actions .cbi-button-apply, -.cbi-page-actions .cbi-button-save, -.cbi-page-actions .cbi-button-reset { - color: #ffffff; - padding: 5px 14px 6px; - background-color: #0064cd; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #049cdb, #0064cd); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #0064cd #0064cd #003f81; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.cbi-input-invalid, -.cbi-value-error input { - color: #FF0000; - border-color: #FF0000; -} - -.cbi-button-up, -.cbi-input-up { - background-position: center center; - background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-down, -.cbi-input-down { - background-position: center center; - background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-find, -.cbi-input-find { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-add, -.cbi-input-add { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-apply, -.cbi-input-apply { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-reset, -.cbi-input-reset { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-edit, -.cbi-input-edit { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-remove, -.cbi-input-remove { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-reload, -.cbi-input-reload { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-link, -.cbi-input-link { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-download, -.cbi-input-download { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-dropdown { - border: 1px solid #ccc; - border-radius: 3px; - display: inline-flex; - padding: 0; - cursor: pointer; - height: auto; - background: linear-gradient(#fff 0%, #e9e8e6 100%); - position: relative; - color: #404040; -} - -.cbi-dropdown:focus { - outline: 2px solid #4b6e9b; -} - -.cbi-dropdown > ul { - margin: 0 !important; - padding: 0; - list-style: none; - overflow-x: hidden; - overflow-y: auto; - display: flex; - width: 100%; -} - -.cbi-dropdown > ul.preview { - display: none; -} - -.cbi-dropdown > .open, -.cbi-dropdown > .more { - flex-grow: 0; - flex-shrink: 0; - display: flex; - flex-direction: column; - justify-content: center; - text-align: center; - line-height: 2em; - padding: 0 .25em; -} - -.cbi-dropdown > .more, -.cbi-dropdown > ul > li[placeholder] { - color: #777; - font-weight: bold; - text-shadow: 1px 1px 0px #fff; - display: none; -} - -.cbi-dropdown > ul > li { - display: none; - padding: .25em; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - flex-shrink: 1; - flex-grow: 1; - align-items: center; - align-self: center; - color: #404040; - min-height: 20px; -} - -.cbi-dropdown > ul > li .hide-open { display: initial; } -.cbi-dropdown > ul > li .hide-close { display: none; } - -.cbi-dropdown > ul > li[display]:not([display="0"]) { - border-left: 1px solid #ccc; -} - -.cbi-dropdown[empty] > ul { - max-width: 1px; -} - -.cbi-dropdown > ul > li > form { - display: none; - margin: 0; - padding: 0; - pointer-events: none; -} - -.cbi-dropdown > ul > li img { - vertical-align: middle; - margin-right: .25em; -} - -.cbi-dropdown > ul > li > form > input[type="checkbox"] { - margin: 0; -} - -.cbi-dropdown > ul > li input[type="text"] { - height: 20px; -} - -.cbi-dropdown[open] { - position: relative; -} - -.cbi-dropdown[open] > ul.dropdown { - display: block; - background: #f6f6f5; - border: 1px solid #918e8c; - box-shadow: 0 0 4px #918e8c; - position: absolute; - z-index: 1000; - max-width: none; - min-width: 100%; - width: auto; -} - -.cbi-dropdown > ul > li[display], -.cbi-dropdown[open] > ul.preview, -.cbi-dropdown[open] > ul.dropdown > li, -.cbi-dropdown[multiple] > ul > li > label, -.cbi-dropdown[multiple][open] > ul.dropdown > li, -.cbi-dropdown[multiple][more] > .more, -.cbi-dropdown[multiple][empty] > .more { - flex-grow: 1; - display: flex; -} - -.cbi-dropdown[empty] > ul > li, -.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], -.cbi-dropdown[multiple][open] > ul.dropdown > li > form { - display: block; -} - -.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } -.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; } - -.cbi-dropdown[open] > ul.dropdown > li { - border-bottom: 1px solid #ccc; -} - -.cbi-dropdown[open] > ul.dropdown > li[selected] { - background: #b0d0f0; -} - -.cbi-dropdown[open] > ul.dropdown > li.focus { - background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); -} - -.cbi-dropdown[open] > ul.dropdown > li:last-child { - margin-bottom: 0; - border-bottom: none; -} - -.cbi-dropdown[disabled] { - pointer-events: none; - opacity: .6; -} - -.btn.active, .btn:active { - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled { - cursor: default; - background-image: none; - opacity: 0.65; - box-shadow: none; -} - -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - box-shadow: none; -} - -.btn.large { - font-size: 15px; - line-height: normal; - padding: 9px 14px 9px; - border-radius: 6px; -} - -.btn.small { - padding: 7px 9px 7px; - font-size: 11px; -} - -/* Button icons for specific pages */ -.Startup .cbi-section-table input.cbi-input-apply, -.Startup .cbi-section-table input.cbi-button-apply { - background-image: url("../resources/cbi/apply.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-reload, -.Startup .cbi-section-table input.cbi-input-reload { - background-image: url("../resources/cbi/reload.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-remove, -.Processes .cbi-section-table div.cbi-section-remove input, -.Startup .cbi-section-table input.cbi-input-remove, -.Startup .cbi-section-table div.cbi-section-remove input { - background-image: url("../resources/cbi/remove.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-reset, -.Processes .cbi-section-table input.cbi-button-reset, -.Startup .cbi-section-table input.cbi-input-reset, -.Startup .cbi-section-table input.cbi-button-reset { - background-image: url("../resources/cbi/reset.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Startup .cbi-section-table input.cbi-input-save, -.Startup .cbi-section-table input.cbi-button-save { - background-image: url("../resources/cbi/save.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -.close { - float: right; - color: #000000; - font-size: 20px; - font-weight: bold; - line-height: 13.5px; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.25; -} - -.close:hover { - color: #000000; - text-decoration: none; - opacity: 0.4; -} - -.alert-message { - position: relative; - padding: 7px 15px; - margin-bottom: 18px; - color: #404040; - background-color: #eedc94; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #fceec1, #eedc94); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #eedc94 #eedc94 #e4c652; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - border-width: 1px; - border-style: solid; - border-radius: 4px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -} - -.alert-message .close { - margin-top: 1px; - *margin-top: 0; -} - -.alert-message a { - font-weight: bold; - color: #404040; -} - -.alert-message.danger p a, -.alert-message.error p a, -.alert-message.success p a, -.alert-message.info p a { - color: #ffffff; -} - -.alert-message h5 { - line-height: 18px; -} - -.alert-message p { - margin-bottom: 0; -} - -.alert-message div { - margin-top: 5px; - margin-bottom: 2px; - line-height: 28px; -} - -.alert-message .btn { - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); -} - -.label { - padding: 1px 3px 2px; - font-size: 9.75px; - font-weight: bold; - color: #ffffff !important; - text-transform: uppercase; - white-space: nowrap; - background-color: #bfbfbf; - border-radius: 3px; - text-shadow: none; -} - -a.label:link, -a.label:visited { - color: #ffffff; -} - -a.label:hover { - text-decoration: none; -} - -.label.important { - background-color: #c43c35; -} - -.label.warning { - background-color: #f89406; -} - -.label.success { - background-color: #46a546; -} - -.label.notice { - background-color: #62cffc; -} - -/* LuCI specific items */ -.hidden { display: none } - -#memtotal > div, -#memfree > div, -#memcache > div, -#membuff > div, -#conns > div { - border: 1px solid #CCCCCC; - border-radius: 3px 3px 3px 3px; - color: #808080; - display: inline-block; - font-size: 13px; - line-height: 18px; -} - -#xhr_poll_status { - cursor: pointer; -} - -form.inline { display: inline } - -header .pull-right { padding-top: 8px; } - -#modemenu li:last-child span.divider { display: none } - -#syslog { width: 100%; } - -.cbi-section-table tbody tr:nth-child(odd) td, .cbi-section-table tbody tr:nth-child(odd) th { - background-color: #f9f9f9; -} - -.cbi-section-table tbody tr:hover td, .cbi-section-table tbody tr:hover th { - background-color: #f5f5f5; -} - -.cbi-section-table tr.cbi-section-table-descr th { - font-weight: normal; -} - -.left { text-align: left !important; } - -.right { text-align: right !important; } - -.center { text-align: center !important; } - -.cbi-value-field { line-height: 1.5em; } - -.cbi-value-field input[type=checkbox], -.cbi-value-field input[type=radio] { - margin-top: 8px; - margin-right: 6px; -} - -table table td, -.cbi-value-field table td { - border: none; -} - -.table.cbi-section-table input, -.table.cbi-section-table textarea, -.table.cbi-section-table select { - width: auto; -} - -.table.cbi-section-table .td.cbi-section-table-cell { - white-space: nowrap; - text-align: right; -} - -.table.cbi-section-table .td.cbi-section-table-cell select { - width: inherit; -} - -.table.valign-middle .td { - vertical-align: middle; -} - -.cbi-value-description { display: inline; } - -.cbi-value-description img { vertical-align: middle; } - -.cbi-section-error { - border: 1px solid #FF0000; - border-radius: 3px; - background-color: #FCE6E6; - padding: 5px; -} - -.cbi-section-error ul { margin: 0 0 0 20px; } - -.cbi-section-error ul li { - color: #FF0000; - font-weight: bold; -} - -.ifacebox { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; - margin: 0 10px; - text-align: center; - white-space: nowrap; - background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - border-radius: 4px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - display: inline-flex; - flex-direction: column; - line-height: 1.2em; - min-width: 100px; -} - -.ifacebox .ifacebox-head { - border-bottom: 1px solid #CCCCCC; - padding: 2px; - background: #eee; -} - -.ifacebox .ifacebox-head.active { - background: #90c0e0; -} - -.ifacebox .ifacebox-body { - padding: 6px; -} - -.ifacebadge { - display: inline-flex; - flex-direction: row; - white-space: nowrap; - background-color: #FFFFFF; - border: 1px solid #CCCCCC; - padding: 2px; - background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - border-radius: 4px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - cursor: default; - line-height: 1.2em; -} - -.ifacebadge img { - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: .25em; -} - -.ifacebadge-active { - border-color: #000000; - font-weight: bold; -} - -.network-status-table { - display: flex; - flex-wrap: wrap; -} - -.network-status-table .ifacebox { - margin: .5em; - flex-grow: 1; -} - -.network-status-table .ifacebox-body { - display: flex; - flex-direction: column; - height: 100%; - text-align: left; -} - -.network-status-table .ifacebox-body > span { - flex: 10; -} - -.network-status-table .ifacebox-body > div { - display: flex; - flex-wrap: wrap; -} - -.network-status-table .ifacebox-body .ifacebadge { - flex: 1; - margin: .5em .25em 0 .25em; - padding: .5em; - min-width: 220px; -} - -.zonebadge { - padding: 2px; - border-radius: 4px; - display: inline-block; - white-space: nowrap; - color: #666666; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - cursor: pointer; -} - -.zonebadge > em, -.zonebadge > strong { - margin: 0 2px; - display: inline-block; -} - -.zonebadge input { - width: 6em; -} - -.zonebadge > .ifacebadge { - margin-left: 2px; -} - -.zonebadge-empty { - border: 1px dashed #AAAAAA; - color: #AAAAAA; - font-style: italic; - font-size: smaller; -} - -div.cbi-value var, -.td.cbi-value-field var { - font-style: italic; - color: #0069D6; -} - -.uci-change-list { - font-family: monospace; -} - -.uci-change-list ins, -.uci-change-legend-label ins { - text-decoration: none; - border: 1px solid #00FF00; - background-color: #CCFFCC; - display: block; - padding: 2px; -} - -.uci-change-list del, -.uci-change-legend-label del { - text-decoration: none; - border: 1px solid #FF0000; - background-color: #FFCCCC; - display: block; - font-style: normal; - padding: 2px; -} - -.uci-change-list var, -.uci-change-legend-label var { - text-decoration: none; - border: 1px solid #CCCCCC; - background-color: #EEEEEE; - display: block; - font-style: normal; - padding: 2px; - line-height: 19px; - white-space: pre; -} - -.uci-change-list var ins, -.uci-change-list var del { - display: inline; - /*border: none;*/ - white-space: pre; - font-style: normal; - padding: 0px; -} - -.uci-change-legend { - padding: 5px; -} - -.uci-change-legend-label { - width: 150px; - float: left; -} - -.uci-change-legend-label > ins, -.uci-change-legend-label > del, -.uci-change-legend-label > var { - float: left; - margin-right: 4px; - width: 10px; - height: 10px; - display: block; -} - -.uci-change-legend-label var ins, -.uci-change-legend-label var del { - line-height: 6px; - border: none; -} - -html body.apply-overlay-active { - height: calc(100vh - 63px); -} From 90333e9906d0fdb219936073efbf17d0c9bd652d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 10:52:13 +0200 Subject: [PATCH 079/307] Fix VPN gateway check --- .../luasrc/controller/openmptcprouter.lua | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 1621c7821..664705598 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -192,6 +192,23 @@ function get_ip(interface) return ip end +function get_gateway(interface) + local gateway = nil + local dump = nil + + dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + + if dump and dump.route then + local _, route + for _, route in ipairs(dump.route) do + if dump.route[_].target == "0.0.0.0" then + gateway = dump.route[_].nexthop + end + end + end + return gateway +end + -- This function come from OverTheBox by OVH with some changes -- Copyright 2015 OVH -- Simon Lelievre (simon.lelievre@corp.ovh.com) @@ -239,8 +256,11 @@ function interfaces_status() mArray.openmptcprouter["tun_service"] = true mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn") local tun_dev = uci:get("network","omrvpn","ifname") - if tundev ~= "" then - local peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | tr -d '\n'")) + if tun_dev ~= "" then + local peer = get_gateway("omrvpn") + if peer ~= "" then + ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | tr -d '\n'")) + end if peer ~= "" then local tunnel_ping_test = ut.trim(sys.exec("ping -W 1 -c 1 " .. peer .. " | grep '100% packet loss'")) if tunnel_ping_test == "" then From 57cbb81bd2b2bf61dfccd368be3d9284bbeffe36 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 10:52:26 +0200 Subject: [PATCH 080/307] Add new packages --- openmptcprouter-full/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index dcfd27772..2e353d605 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter-full -PKG_VERSION:=0.5 +PKG_VERSION:=0.6 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk @@ -37,6 +37,8 @@ MY_DEPENDS := \ luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass \ omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd iputils-traceroute6 \ speedtestc ethtool \ + luci-proto-3g \ + luci-app-mlvpn mlvpn \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From bca465d3f8e714aa9e5834f73fca84a03558aa51 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 13:39:12 +0200 Subject: [PATCH 081/307] Reset CircleCI caches --- .circleci/config.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 34fe4e40b..eed870c89 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,8 +25,8 @@ jobs: - run: name: cache command: | - echo "cache 6 $OMR_TARGET" > /tmp/cache-target - echo "cache 10 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 7 $OMR_TARGET" > /tmp/cache-target + echo "cache 11 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -82,8 +82,8 @@ jobs: - run: name: cache command: | - echo "cache 6 $OMR_TARGET" > /tmp/cache-target - echo "cache 10 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 7 $OMR_TARGET" > /tmp/cache-target + echo "cache 11 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -139,8 +139,8 @@ jobs: - run: name: cache command: | - echo "cache 9 $OMR_TARGET" > /tmp/cache-target - echo "cache 13 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 10 $OMR_TARGET" > /tmp/cache-target + echo "cache 14 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -196,8 +196,8 @@ jobs: - run: name: cache command: | - echo "cache 9 $OMR_TARGET" > /tmp/cache-target - echo "cache 13 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 10 $OMR_TARGET" > /tmp/cache-target + echo "cache 14 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: From cccf917c1621c1ccde817dd28d048105a8d2a586 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 14:52:58 +0200 Subject: [PATCH 082/307] Fix tracking support for mlvpn --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index fe229309a..5e9b0d296 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -102,7 +102,8 @@ fi multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off") if [ "$multipath_config" = "master" ]; then if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then - if [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep tun)" = "" ]; then + omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") + if [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then _log "Master up : Replace default route by $current_interface_gw dev $OMR_TRACKER_DEVICE" ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE else From 1d5fbd422d304d573633fddbccbcc0704193c293 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 14:53:35 +0200 Subject: [PATCH 083/307] Empty pass in wizard remove it --- .../luasrc/controller/openmptcprouter.lua | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 664705598..3f82fe26c 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -87,6 +87,11 @@ function wizard_add() ucic:set("shadowsocks-libev","sss0","disabled",0) ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") + else + ucic:set("shadowsocks-libev","sss0","key","") + ucic:set("shadowsocks-libev","sss0","disabled",1) + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") end -- Set Glorytun TCP settings @@ -100,6 +105,12 @@ function wizard_add() ucic:set("glorytun","vpn","proto","tcp") ucic:save("glorytun") ucic:commit("glorytun") + else + ucic:set("glorytun","vpn","key","") + ucic:set("glorytun","vpn","enable",0) + ucic:set("glorytun","vpn","proto","tcp") + ucic:save("glorytun") + ucic:commit("glorytun") end -- Set MLVPN settings @@ -115,6 +126,11 @@ function wizard_add() ucic:set("mlvpn","general","interface_name","mlvpn0") ucic:save("mlvpn") ucic:commit("mlvpn") + else + ucic:set("mlvpn","general","enable",0) + ucic:set("mlvpn","general","password","") + ucic:save("mlvpn") + ucic:commit("mlvpn") end luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") From ee70e81c8be93dc5a4b4617f338caf3aaf42e751 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 16:48:15 +0200 Subject: [PATCH 084/307] Fix VPN gateway search --- .../luasrc/controller/openmptcprouter.lua | 8 +++++++- omr-6in4/files/etc/init.d/omr-6in4 | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 3f82fe26c..d611da59f 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -275,7 +275,7 @@ function interfaces_status() if tun_dev ~= "" then local peer = get_gateway("omrvpn") if peer ~= "" then - ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | tr -d '\n'")) + peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) end if peer ~= "" then local tunnel_ping_test = ut.trim(sys.exec("ping -W 1 -c 1 " .. peer .. " | grep '100% packet loss'")) @@ -371,6 +371,12 @@ function interfaces_status() -- Detect WAN gateway status local gw_ping = 'UP' + if gateway == "" then + gateway = get_gateway(interface) + end + if gateway ~= "" then + gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) + end if gateway ~= "" then local gw_ping_test = ut.trim(sys.exec("ping -W 1 -c 1 " .. gateway .. " | grep '100% packet loss'")) if gw_ping_test ~= "" then diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 21e5a2d29..3a69f1560 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -11,9 +11,9 @@ service_triggers() { reload_service() { iface=$(uci -q get glorytun.vpn.dev) addr=$(ubus call network.interface.omrvpn status | jsonfilter -e '@["ipv4-address"][0].address | tr -d "\n") - [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") + [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | grep -v / | tr -d "\n") peer=$(ubus call network.interface.omrvpn status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") - [ -z "$peer" ] && [ -n "$iface" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n") + [ -z "$peer" ] && [ -n "$iface" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") [ -z "$addr" ] && exit 0 [ -z "$peer" ] && exit 0 if [ "$addr" != "$(uci -q get network.omr6in4.ipaddr)" ] || [ "$peer" != "$(uci -q get network.omr6in4.peeraddr)" ]; then From 5d7fa6e68dc13beacf016b1ad122bc2559a2deed Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 16:48:42 +0200 Subject: [PATCH 085/307] Add some french translation --- luci-app-mlvpn/po/fr/mlvpn.po | 61 +++++++++++++++++++ luci-app-mlvpn/po/templates/mlvpn.pot | 50 +++++++++++++++ .../po/fr/openmptcprouter.po | 26 ++++++-- .../po/templates/openmptcprouter.pot | 15 +++++ 4 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 luci-app-mlvpn/po/fr/mlvpn.po create mode 100644 luci-app-mlvpn/po/templates/mlvpn.pot diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po new file mode 100644 index 000000000..36e5e89ab --- /dev/null +++ b/luci-app-mlvpn/po/fr/mlvpn.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: Ycarus \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: fr\n" + +msgid "Add" +msgstr "Ajouter" + +msgid "Enable" +msgstr "Activé" + +msgid "First remote port" +msgstr "Premier port distant" + +msgid "Interface name" +msgstr "Nom de l'interface" + +msgid "Interface will increase port used beginning with this" +msgstr "" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Invalid" +msgstr "Invalide" + +msgid "Loss tolerance" +msgstr "" + +msgid "MLVPN" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Password" +msgstr "Mot de passe" + +msgid "Remote host" +msgstr "Nom de l'hôte distant ou adresse IP" + +msgid "Remote/Bind port" +msgstr "Port de connexion distant" + +msgid "Reorder buffer size" +msgstr "" + +msgid "Settings" +msgstr "Paramètres" + +msgid "Timeout (s)" +msgstr "Délais d'attente (s)" diff --git a/luci-app-mlvpn/po/templates/mlvpn.pot b/luci-app-mlvpn/po/templates/mlvpn.pot new file mode 100644 index 000000000..0eecd2f65 --- /dev/null +++ b/luci-app-mlvpn/po/templates/mlvpn.pot @@ -0,0 +1,50 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Add" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "First remote port" +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface will increase port used beginning with this" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Loss tolerance" +msgstr "" + +msgid "MLVPN" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Remote host" +msgstr "" + +msgid "Remote/Bind port" +msgstr "" + +msgid "Reorder buffer size" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Timeout (s)" +msgstr "" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 709749bd8..5ef639f54 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" +"Last-Translator: Ycarus \n" "Language-Team: \n" +"Language: fr\n" "MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.6\n" -"Last-Translator: Ycarus \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr\n" msgid "Add an interface" msgstr "Ajouter une interface" @@ -24,6 +24,9 @@ msgstr "Supprimer" msgid "Disable IPv6" msgstr "Désactiver IPv6" +msgid "Glorytun is used for UDP and ICMP" +msgstr "Glorytun est utilisé pour UDP et ICMP" + msgid "Glorytun key" msgstr "Clef Glorytun" @@ -42,6 +45,13 @@ msgstr "Masque de sous-réseau IPv6" msgid "Interfaces settings" msgstr "Paramètres des interfaces" +msgid "MLVPN can replace Glorytun with connection with same latency" +msgstr "" +"MLVPN peut remplacer Glorytun pour les connexions avec la même latence" + +msgid "MLVPN password" +msgstr "Mot de passe MLVPN" + msgid "Maximum scaling CPU frequency" msgstr "" @@ -66,6 +76,9 @@ msgstr "" msgid "Server IP" msgstr "IP du serveur" +msgid "Server IP will be set for ShadowSocks, Glorytun and MLVPN" +msgstr "L'IP du serveur sera configuré pour ShadowSocks, Glorytun et MLVPN" + msgid "Server settings" msgstr "Paramètres du serveur" @@ -78,6 +91,9 @@ msgstr "Mettez ici l'IP du modem" msgid "Settings Wizard" msgstr "Assistant de configuration" +msgid "ShadowSocks is used for TCP" +msgstr "ShadowSocks est utilisé pour le TCP" + msgid "ShadowSocks key" msgstr "Clef de ShadowSocks" @@ -91,4 +107,6 @@ msgid "Wizard" msgstr "Assistant" msgid "You must disable DHCP on your modems and set IP in different networks." -msgstr "Vous devez désactiver DHCP sur vos modems et configurer leurs IP dans des réseaux différents." +msgstr "" +"Vous devez désactiver DHCP sur vos modems et configurer leurs IP dans des " +"réseaux différents." diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index 2dcad6806..e20dcb225 100644 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -13,6 +13,9 @@ msgstr "" msgid "Disable IPv6" msgstr "" +msgid "Glorytun is used for UDP and ICMP" +msgstr "" + msgid "Glorytun key" msgstr "" @@ -31,6 +34,12 @@ msgstr "" msgid "Interfaces settings" msgstr "" +msgid "MLVPN can replace Glorytun with connection with same latency" +msgstr "" + +msgid "MLVPN password" +msgstr "" + msgid "Maximum scaling CPU frequency" msgstr "" @@ -55,6 +64,9 @@ msgstr "" msgid "Server IP" msgstr "" +msgid "Server IP will be set for ShadowSocks, Glorytun and MLVPN" +msgstr "" + msgid "Server settings" msgstr "" @@ -67,6 +79,9 @@ msgstr "" msgid "Settings Wizard" msgstr "" +msgid "ShadowSocks is used for TCP" +msgstr "" + msgid "ShadowSocks key" msgstr "" From 570fedd38fad6e330716696b584a849a4902ba52 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 16:53:06 +0200 Subject: [PATCH 086/307] Add dependencies --- openmptcprouter-full/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 2e353d605..4bff70b3d 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -39,6 +39,7 @@ MY_DEPENDS := \ speedtestc ethtool \ luci-proto-3g \ luci-app-mlvpn mlvpn \ + omr-update \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From 0baa8cba4bf76b7eb4685f56bf733ae7777ce664 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 19:06:59 +0200 Subject: [PATCH 087/307] Reset CircleCI cache --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index eed870c89..25221e643 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,8 +139,8 @@ jobs: - run: name: cache command: | - echo "cache 10 $OMR_TARGET" > /tmp/cache-target - echo "cache 14 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 11 $OMR_TARGET" > /tmp/cache-target + echo "cache 15 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -196,8 +196,8 @@ jobs: - run: name: cache command: | - echo "cache 10 $OMR_TARGET" > /tmp/cache-target - echo "cache 14 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 11 $OMR_TARGET" > /tmp/cache-target + echo "cache 15 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: From 5e05415e4e054ae834c9551b0b9cfe50932ac6bf Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 19:07:53 +0200 Subject: [PATCH 088/307] Add and fix some MPTCP settings --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 14 +++++++++++-- .../model/cbi/admin_network/network.lua | 4 ++-- mptcp/files/etc/init.d/mptcp | 9 +++++++- mptcp/files/etc/uci-defaults/mptcp-defaults | 21 ++++++++++++++++++- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 079755b2e..09a3ceda8 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -10,8 +10,8 @@ local mtcpg = s:option(ListValue, "multipath", translate("Multipath TCP")) mtcpg:value("enable", translate("enable")) mtcpg:value("disable", translate("disable")) local mtcpck = s:option(ListValue, "mptcp_checksum", translate("Multipath TCP checksum")) -mtcpck:value("enable", translate("enable")) -mtcpck:value("disable", translate("disable")) +mtcpck:value(1, translate("enable")) +mtcpck:value(0, translate("disable")) local mtcppm = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager")) mtcppm:value("default", translate("default")) mtcppm:value("fullmesh", translate("fullmesh")) @@ -29,6 +29,16 @@ local availablecong = sys.exec("sysctl net.ipv4.tcp_available_congestion_control for cong in string.gmatch(availablecong, "[^%s]+") do congestion:value(cong, translate(cong)) end +local mtcpfm_subflows = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses")) +mtcpfm_subflows.datatype = "uinteger" +mtcpfm_subflows.rmempty = false +local mtcpfm_createonerr = s:option(Value, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) +mtcpfm_createonerr:value(1, translate("enable")) +mtcpfm_createonerr:value(0, translate("disable")) + +local mtcpnd_subflows = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number")) +mtcpnd_subflows.datatype = "uinteger" +mtcpnd_subflows.rmempty = false s = m:section(TypedSection, "interface", translate("Interfaces Settings")) mptcp = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master")) diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua index 739be0510..c9d1dc4b2 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua @@ -130,8 +130,8 @@ if fs.access("/proc/sys/net/mptcp") then mtcp:value("enable", translate("enable")) mtcp:value("disable", translate("disable")) local mtcpck = s:option(ListValue, "mptcp_checksum", translate("Multipath TCP checksum")) - mtcpck:value("enable", translate("enable")) - mtcpck:value("disable", translate("disable")) + mtcpck:value(1, translate("enable")) + mtcpck:value(0, translate("disable")) local mtcppm = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager")) mtcppm:value("default", translate("default")) mtcppm:value("fullmesh", translate("fullmesh")) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 6b7ad39bd..3f82dab2a 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -5,7 +5,7 @@ START=18 USE_PROCD=1 global_multipath_settings() { - local multipath mptcp_path_manager mptcp_schdeduler congestion mptcp_checksum mptcp_syn_retries + local multipath mptcp_path_manager mptcp_schdeduler congestion mptcp_checksum mptcp_syn_retries mptcp_fullmesh_num_subflows mptcp_fullmesh_create_on_err mptcp_ndiffports_num_subflows local multipath_status=0 config_load network config_get multipath globals multipath @@ -14,6 +14,10 @@ global_multipath_settings() { config_get congestion globals congestion config_get mptcp_checksum globals mptcp_checksum config_get mptcp_syn_retries globals mptcp_syn_retries + config_get mptcp_fullmesh_num_subflows globals mptcp_fullmesh_num_subflows + config_get mptcp_fullmesh_create_on_err globals mptcp_fullmesh_create_on_err + config_get mptcp_ndiffports_num_subflows globals mptcp_ndiffports_num_subflows + [ "$multipath" = "enable" ] && multipath_status=1 # Global MPTCP configuration @@ -23,6 +27,9 @@ global_multipath_settings() { [ -z "$congestion" ] || sysctl -qw net.ipv4.tcp_congestion_control="$congestion" [ -z "$mptcp_checksum" ] || sysctl -qw net.mptcp.mptcp_checksum="$mptcp_checksum" [ -z "$mptcp_syn_retries" ] || sysctl -qw net.mptcp.mptcp_syn_retries="$mptcp_syn_retries" + [ -z "$mptcp_fullmesh_num_subflows" ] || sysctl -qw /sys/module/mptcp_fullmesh/parameters/num_subflows="$mptcp_fullmesh_num_subflows" + [ -z "$mptcp_fullmesh_create_on_err" ] || sysctl -qw /sys/module/mptcp_fullmesh/parameters/create_on_err="$mptcp_fullmesh_create_on_err" + [ -z "$mptcp_ndiffports_num_subflows" ] || sysctl -qw /sys/module/mptcp_ndiffports/parameters/num_subflows="$mptcp_ndiffports_num_subflows" } interface_multipath_settings() { diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index c78e3043c..da5297d07 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -1,5 +1,5 @@ #!/bin/sh -if [ "$(uci -q show network.globals | grep mptcp)" = "" ]; then +if [ "$(uci -q show network.globals | grep mptcp_path_manager)" = "" ]; then uci -q batch <<-EOF set network.globals.multipath='enable' set network.globals.mptcp_path_manager='fullmesh' @@ -10,6 +10,25 @@ if [ "$(uci -q show network.globals | grep mptcp)" = "" ]; then commit network EOF fi +if [ "$(uci -q get network.globals.mptcp_checksum")" = "enable" ]; then + uci -q batch <<-EOF + set network.globals.mptcp_checksum=1 + EOF +fi +if [ "$(uci -q get network.globals.mptcp_checksum")" = "disable" ]; then + uci -q batch <<-EOF + set network.globals.mptcp_checksum=0 + EOF +fi + +if [ "$(uci -q show network.globals | grep mptcp_fullmesh)" = "" ]; then + uci -q batch <<-EOF + set network.globals.mptcp_fullmesh_num_subflows=1 + set network.globals.mptcp_fullmesh_create_on_err=0 + set network.globals.mptcp_ndiffports_num_subflows=1 + commit network + EOF +fi uci -q batch <<-EOF delete ucitrack.@mptcp[-1] add ucitrack mptcp From 5f85796dcdb211176103c02da54662aae14398d0 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 21:24:00 +0200 Subject: [PATCH 089/307] Change some defaults settings --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 7 +++++++ shadowsocks-libev/files/shadowsocks.conf | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index db7d4e345..7f42aeeba 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -6,6 +6,13 @@ if [ "$(uci -q get unbound.@unbound[0].listen_port | grep 5353)" = "" ]; then set unbound.@unbound[-1].protocol="ip4_only" set unbound.@unbound[-1].enabled=1 set unbound.@unbound[-1].recursion="aggressive" + set unbound.@unbound[-1].prefetch_root=1 + commit unbound + EOF +fi +if [ "$(uci -q get unbound.@unbound[0].prefetch_root)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set unbound.@unbound[-1].prefetch_root=1 commit unbound EOF fi diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf index 28421146e..4e9a29dad 100644 --- a/shadowsocks-libev/files/shadowsocks.conf +++ b/shadowsocks-libev/files/shadowsocks.conf @@ -1,6 +1,6 @@ # local sysctl settings can be stored in this directory # max open files -#fs.file-max = 512000 +fs.file-max = 512000 # max read buffer net.core.rmem_max = 134217728 # max write buffer From 8d1630c449afae52555f2a5515dd1d194a2e3b6e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 22:28:21 +0200 Subject: [PATCH 090/307] Fix overview page --- luci-mod-admin-full/luasrc/view/admin_status/index.htm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/luci-mod-admin-full/luasrc/view/admin_status/index.htm index 7e9c4d0aa..ae6a10193 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -13,7 +13,7 @@ local has_ipv6 = fs.access("/proc/net/ipv6_route") local has_dhcp = fs.access("/etc/config/dhcp") - local has_mptcp = luci.sys.exec("sysctl -n net.mptcp.mptcp_enabled | tr -d '\n'") + local has_mptcp = (luci.sys.exec("sysctl -n net.mptcp.mptcp_enabled | tr -d '\n'")) or 0 local has_wifi = ((fs.stat("/etc/config/wireless", "size") or 0) > 0) local sysinfo = luci.util.ubus("system", "info") or { } @@ -223,6 +223,7 @@ if (!(npoll++ % 5)) updateHosts(); + <% if has_mptcp == 0 then %> var us = document.getElementById('upstream_status_table'); while (us.lastElementChild) @@ -270,6 +271,7 @@ '<%:DNS%> 5', (ifc6.dns) ? ifc6.dns[4] : null, '<%:Connected%>', (ifc6.uptime > 0) ? '%t'.format(ifc6.uptime) : null)); <% end %> + <% end %> <% if has_dsl then %> var dsl_i = document.getElementById('dsl_i'); From d949abf0dc79995350aea703497cba73d7236942 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 8 Jun 2018 22:42:01 +0200 Subject: [PATCH 091/307] Fix omr-update --- omr-update/files/etc/init.d/omr-update | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/omr-update/files/etc/init.d/omr-update b/omr-update/files/etc/init.d/omr-update index 666bc05c2..53e690e00 100755 --- a/omr-update/files/etc/init.d/omr-update +++ b/omr-update/files/etc/init.d/omr-update @@ -1,7 +1,7 @@ #!/bin/sh /etc/rc.common # Copyright (C) 2006-2011 OpenWrt.org -START=9 +START=09 STOP=98 boot() { @@ -11,12 +11,14 @@ boot() { files="$(ls)" [ -n "$files" ] && { mkdir /usr/share/omr-update - cp /etc/uci-defaults/* /usr/share/omr-update + if [ "$(grep rom /etc/mtab)" = "" ]; then + cp /etc/uci-defaults/* /usr/share/omr-update + fi return 0 } source /etc/os-release if [ "$(uci -q get openmptcprouter.settings.version)" != "${VERSION}" ]; then - cd /usr/share/omr-update || return 0 + cd /rom/etc/uci-defaults || cd /usr/share/omr-update || return 0 files="$(ls)" [ -z "$files" ] && return 0 for file in $files; do From 79b2e1c88bcd2f51e375e055a413d7f1ede4abc0 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 9 Jun 2018 07:55:54 +0200 Subject: [PATCH 092/307] Fix omr-update --- omr-update/files/etc/init.d/omr-update | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-update/files/etc/init.d/omr-update b/omr-update/files/etc/init.d/omr-update index 53e690e00..421c974e7 100755 --- a/omr-update/files/etc/init.d/omr-update +++ b/omr-update/files/etc/init.d/omr-update @@ -10,7 +10,7 @@ boot() { cd /etc/uci-defaults || return 0 files="$(ls)" [ -n "$files" ] && { - mkdir /usr/share/omr-update + mkdir -p /usr/share/omr-update if [ "$(grep rom /etc/mtab)" = "" ]; then cp /etc/uci-defaults/* /usr/share/omr-update fi From f6701ae8c260a63a3cc237020f1bafc387314552 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 9 Jun 2018 07:56:06 +0200 Subject: [PATCH 093/307] Fix omr-6in4 --- omr-6in4/files/etc/init.d/omr-6in4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 3a69f1560..d782421a1 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -10,8 +10,8 @@ service_triggers() { reload_service() { iface=$(uci -q get glorytun.vpn.dev) - addr=$(ubus call network.interface.omrvpn status | jsonfilter -e '@["ipv4-address"][0].address | tr -d "\n") - [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | grep -v / | tr -d "\n") + addr=$(ubus call network.interface.omrvpn status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") + [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") peer=$(ubus call network.interface.omrvpn status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") [ -z "$peer" ] && [ -n "$iface" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") [ -z "$addr" ] && exit 0 From 286c6e25ede149232afb4544e9e5aa20c7885ae5 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 9 Jun 2018 17:39:17 +0200 Subject: [PATCH 094/307] Fix mptcp uci --- mptcp/files/etc/uci-defaults/mptcp-defaults | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index da5297d07..ba47e4163 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -10,12 +10,12 @@ if [ "$(uci -q show network.globals | grep mptcp_path_manager)" = "" ]; then commit network EOF fi -if [ "$(uci -q get network.globals.mptcp_checksum")" = "enable" ]; then +if [ "$(uci -q get network.globals.mptcp_checksum)" = "enable" ]; then uci -q batch <<-EOF set network.globals.mptcp_checksum=1 EOF fi -if [ "$(uci -q get network.globals.mptcp_checksum")" = "disable" ]; then +if [ "$(uci -q get network.globals.mptcp_checksum)" = "disable" ]; then uci -q batch <<-EOF set network.globals.mptcp_checksum=0 EOF From 9c3ed6acc94f4d5ce5b474a24f8f242dd718441b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 9 Jun 2018 19:29:02 +0200 Subject: [PATCH 095/307] Fix omr-6in4 add in VPN firewall zone --- omr-6in4/files/etc/uci-defaults/9010-omr-6in4 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 b/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 index 459d76db8..2721775aa 100755 --- a/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 +++ b/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 @@ -12,6 +12,12 @@ if [ "$(uci -q show network | grep omr6in4)" = "" ]; then set network.omr6in4.peeraddr=10.255.255.1 set network.omr6in4.gateway=fe80::a00:1 commit network + EOF + rm -f /tmp/luci-indexcache +fi + +if [ "$(uci -q get firewall.zone_vpn.network | grep omr6in4)" = "" ]; then + uci -q batch <<-EOF add_list firewall.zone_vpn.network=omr6in4 commit firewall EOF From ddb427aadf0ea9b975a2754f4711da09f3703df1 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 9 Jun 2018 21:47:40 +0200 Subject: [PATCH 096/307] Fix gw check in status page --- .../luasrc/controller/openmptcprouter.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index d611da59f..3cfca4c30 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -274,7 +274,7 @@ function interfaces_status() local tun_dev = uci:get("network","omrvpn","ifname") if tun_dev ~= "" then local peer = get_gateway("omrvpn") - if peer ~= "" then + if peer == "" then peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) end if peer ~= "" then @@ -374,7 +374,7 @@ function interfaces_status() if gateway == "" then gateway = get_gateway(interface) end - if gateway ~= "" then + if gateway == "" then gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) end if gateway ~= "" then From c42fb3bf4d7833c5cc67b5433cfcce1cb1ff8a81 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 10 Jun 2018 06:34:32 +0200 Subject: [PATCH 097/307] Add rt2800 --- openmptcprouter-full/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 4bff70b3d..0404645ec 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -40,6 +40,7 @@ MY_DEPENDS := \ luci-proto-3g \ luci-app-mlvpn mlvpn \ omr-update \ + kmod-rt2800-usb \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From e9ca632745388e9b92945bbfef304f89e4301f93 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 10 Jun 2018 09:39:24 +0200 Subject: [PATCH 098/307] Add libimobiledevice --- openmptcprouter-full/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 0404645ec..048c75fed 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter-full -PKG_VERSION:=0.6 +PKG_VERSION:=0.7 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk @@ -40,7 +40,7 @@ MY_DEPENDS := \ luci-proto-3g \ luci-app-mlvpn mlvpn \ omr-update \ - kmod-rt2800-usb \ + kmod-rt2800-usb libimobiledevice \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From b00049aeb4cc6317dad581cd78153be7613e093d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 10 Jun 2018 19:34:20 +0200 Subject: [PATCH 099/307] Remove dirty logs --- qos-scripts/Makefile | 53 ++ qos-scripts/files/etc/config/qos | 68 +++ qos-scripts/files/etc/hotplug.d/iface/10-qos | 2 + qos-scripts/files/etc/init.d/qos | 28 + qos-scripts/files/usr/bin/qos-start | 4 + qos-scripts/files/usr/bin/qos-stat | 67 +++ qos-scripts/files/usr/bin/qos-stop | 6 + qos-scripts/files/usr/lib/qos/generate.sh | 537 +++++++++++++++++++ qos-scripts/files/usr/lib/qos/tcrules.awk | 106 ++++ 9 files changed, 871 insertions(+) create mode 100644 qos-scripts/Makefile create mode 100644 qos-scripts/files/etc/config/qos create mode 100755 qos-scripts/files/etc/hotplug.d/iface/10-qos create mode 100755 qos-scripts/files/etc/init.d/qos create mode 100755 qos-scripts/files/usr/bin/qos-start create mode 100755 qos-scripts/files/usr/bin/qos-stat create mode 100755 qos-scripts/files/usr/bin/qos-stop create mode 100755 qos-scripts/files/usr/lib/qos/generate.sh create mode 100644 qos-scripts/files/usr/lib/qos/tcrules.awk diff --git a/qos-scripts/Makefile b/qos-scripts/Makefile new file mode 100644 index 000000000..3b14f13f7 --- /dev/null +++ b/qos-scripts/Makefile @@ -0,0 +1,53 @@ +# +# Copyright (C) 2006-2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=qos-scripts +PKG_VERSION:=1.3.0 +PKG_RELEASE:=2 +PKG_LICENSE:=GPL-2.0 + +PKG_MAINTAINER:=Felix Fietkau + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/qos-scripts + SECTION:=utils + CATEGORY:=Base system + DEPENDS:=+tc +kmod-sched-core +kmod-sched-connmark +kmod-ifb +iptables +iptables-mod-ipopt +iptables-mod-conntrack-extra + TITLE:=QoS scripts + PKGARCH:=all +endef + +define Package/qos-scripts/description + A set of scripts that abstract QoS configuration into a simple + configuration file supporting stanzas that specify any number of QoS + entries. +endef + +define Package/qos-scripts/conffiles +/etc/config/qos +endef + +define Build/Prepare +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/qos-scripts/install + $(INSTALL_DIR) $(1) + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,qos-scripts)) diff --git a/qos-scripts/files/etc/config/qos b/qos-scripts/files/etc/config/qos new file mode 100644 index 000000000..44e988a67 --- /dev/null +++ b/qos-scripts/files/etc/config/qos @@ -0,0 +1,68 @@ +# QoS configuration for OpenWrt + +# INTERFACES: +config interface wan + option classgroup "Default" + option enabled 0 + option upload 128 + option download 1024 + +# RULES: +config classify + option target "Priority" + option ports "22,53" + option comment "ssh, dns" +config classify + option target "Normal" + option proto "tcp" + option ports "20,21,25,80,110,443,993,995" + option comment "ftp, smtp, http(s), imap" +config classify + option target "Express" + option ports "5190" + option comment "AOL, iChat, ICQ" +config default + option target "Express" + option proto "udp" + option pktsize "-500" +config reclassify + option target "Priority" + option proto "icmp" +config default + option target "Bulk" + option portrange "1024-65535" + + +# Don't change the stuff below unless you +# really know what it means :) + +config classgroup "Default" + option classes "Priority Express Normal Bulk" + option default "Normal" + + +config class "Priority" + option packetsize 400 + option avgrate 10 + option priority 20 +config class "Priority_down" + option packetsize 1000 + option avgrate 10 + + +config class "Express" + option packetsize 1000 + option avgrate 50 + option priority 10 + +config class "Normal" + option packetsize 1500 + option packetdelay 100 + option avgrate 10 + option priority 5 +config class "Normal_down" + option avgrate 20 + +config class "Bulk" + option avgrate 1 + option packetdelay 200 diff --git a/qos-scripts/files/etc/hotplug.d/iface/10-qos b/qos-scripts/files/etc/hotplug.d/iface/10-qos new file mode 100755 index 000000000..0ced29ac7 --- /dev/null +++ b/qos-scripts/files/etc/hotplug.d/iface/10-qos @@ -0,0 +1,2 @@ +#!/bin/sh +[ "$ACTION" = ifup ] && /etc/init.d/qos enabled && /usr/lib/qos/generate.sh interface "$INTERFACE" | sh diff --git a/qos-scripts/files/etc/init.d/qos b/qos-scripts/files/etc/init.d/qos new file mode 100755 index 000000000..712d906f0 --- /dev/null +++ b/qos-scripts/files/etc/init.d/qos @@ -0,0 +1,28 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +START=50 +USE_PROCD=1 + +validate_qos_section() +{ + uci_validate_section qos interface "${1}" \ + 'enabled:bool' \ + 'upload:uinteger' \ + 'download:uinteger' +} + +service_triggers() +{ + procd_add_reload_trigger "qos" + procd_add_validation validate_qos_section + qos-start +} + +start_service() { + qos-start +} + +reload_service() { + qos-start +} diff --git a/qos-scripts/files/usr/bin/qos-start b/qos-scripts/files/usr/bin/qos-start new file mode 100755 index 000000000..261ffb42b --- /dev/null +++ b/qos-scripts/files/usr/bin/qos-start @@ -0,0 +1,4 @@ +#!/bin/sh +qos-stop +/usr/lib/qos/generate.sh all | sh + diff --git a/qos-scripts/files/usr/bin/qos-stat b/qos-scripts/files/usr/bin/qos-stat new file mode 100755 index 000000000..cbbf8e8de --- /dev/null +++ b/qos-scripts/files/usr/bin/qos-stat @@ -0,0 +1,67 @@ +#!/bin/sh +# Copyright (C) 2011 OpenWrt.org + +. /lib/functions.sh + +include /lib/network + +get_ifname() { + local interface="$1" + local cfgt + + scan_interfaces + config_get cfgt "$interface" TYPE + [ "$cfgt" = "interface" ] && config_get "$interface" ifname +} + +config_cb() { + config_get TYPE "$CONFIG_SECTION" TYPE + [ "interface" = "$TYPE" ] && { + config_get device "$CONFIG_SECTION" ifname + [ -z "$device" ] && device="$(get_ifname ${CONFIG_SECTION})" + config_set "$CONFIG_SECTION" device "$device" + } +} + +config_load qos + +print_comments() { + echo '' + echo '# Interface: '"$1" + echo '# Direction: '"$2" + echo '# Stats: '"$3" + echo '' +} + +get_device() { + ( config_load network; scan_interfaces; config_get "$1" ifname ) +} + +interface_stats() { + local interface="$1" + local device + + device="$(get_device "$interface")" + [ -z "$device" ] && config_get device "$interface" device + config_get_bool enabled "$interface" enabled 1 + [ -z "$device" -o 1 -ne "$enabled" ] && { + return 1 + } + config_get_bool halfduplex "$interface" halfduplex 0 + + if [ 1 -ne "$halfduplex" ]; then + unset halfduplex + print_comments "$interface" "Egress" "Start" + tc -s class show dev "$device" + print_comments "$interface" "Egress" "End" + id="root" + else + id="" + fi + + print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start" + tc -s class show dev "$(tc filter show dev $device $id | grep mirred | sed -e 's,.*\(ifb.*\)).*,\1,')" + print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End" +} + +[ -z "$1" ] && config_foreach interface_stats interface || interface_stats "$1" diff --git a/qos-scripts/files/usr/bin/qos-stop b/qos-scripts/files/usr/bin/qos-stop new file mode 100755 index 000000000..7f654d858 --- /dev/null +++ b/qos-scripts/files/usr/bin/qos-stop @@ -0,0 +1,6 @@ +#!/bin/sh +for iface in $(tc qdisc show | grep -E '(hfsc|ingress)' | awk '{print $5}'); do + tc qdisc del dev "$iface" ingress 2>&- >&- + tc qdisc del dev "$iface" root 2>&- >&- +done +/usr/lib/qos/generate.sh firewall stop | sh diff --git a/qos-scripts/files/usr/lib/qos/generate.sh b/qos-scripts/files/usr/lib/qos/generate.sh new file mode 100755 index 000000000..f1b7413ad --- /dev/null +++ b/qos-scripts/files/usr/lib/qos/generate.sh @@ -0,0 +1,537 @@ +#!/bin/sh +[ -e /lib/functions.sh ] && . /lib/functions.sh || . ./functions.sh +[ -x /sbin/modprobe ] && { + insmod="modprobe" + rmmod="$insmod -r" +} || { + insmod="insmod" + rmmod="rmmod" +} + +add_insmod() { + eval "export isset=\${insmod_$1}" + case "$isset" in + 1) ;; + *) { + [ "$2" ] && append INSMOD "$rmmod $1 >&- 2>&-" "$N" + append INSMOD "$insmod $* >&- 2>&-" "$N"; export insmod_$1=1 + };; + esac +} + +[ -e /etc/config/network ] && { + # only try to parse network config on openwrt + + find_ifname() {( + reset_cb + include /lib/network + scan_interfaces + config_get "$1" ifname + )} +} || { + find_ifname() { + echo "Interface not found." + exit 1 + } +} + +parse_matching_rule() { + local var="$1" + local section="$2" + local options="$3" + local prefix="$4" + local suffix="$5" + local proto="$6" + local mport="" + local ports="" + + append "$var" "$prefix" "$N" + for option in $options; do + case "$option" in + proto) config_get value "$section" proto; proto="${proto:-$value}";; + esac + done + config_get type "$section" TYPE + case "$type" in + classify) unset pkt; append "$var" "-m mark --mark 0/0x0f";; + default) pkt=1; append "$var" "-m mark --mark 0/0xf0";; + reclassify) pkt=1;; + esac + append "$var" "${proto:+-p $proto}" + for option in $options; do + config_get value "$section" "$option" + [ -z "$value" ] && continue + case "$pkt:$option" in + *:srchost) + append "$var" "-s $value" + ;; + *:dsthost) + append "$var" "-d $value" + ;; + *:ports|*:srcports|*:dstports) + value="$(echo "$value" | sed -e 's,-,:,g')" + lproto=${lproto:-tcp} + case "$proto" in + ""|tcp|udp) append "$var" "-m ${proto:-tcp -p tcp} -m multiport";; + *) unset "$var"; return 0;; + esac + case "$option" in + ports) + config_set "$section" srcports "" + config_set "$section" dstports "" + config_set "$section" portrange "" + append "$var" "--ports $value" + ;; + srcports) + config_set "$section" ports "" + config_set "$section" dstports "" + config_set "$section" portrange "" + append "$var" "--sports $value" + ;; + dstports) + config_set "$section" ports "" + config_set "$section" srcports "" + config_set "$section" portrange "" + append "$var" "--dports $value" + ;; + esac + ports=1 + ;; + *:portrange) + config_set "$section" ports "" + config_set "$section" srcports "" + config_set "$section" dstports "" + value="$(echo "$value" | sed -e 's,-,:,g')" + case "$proto" in + ""|tcp|udp) append "$var" "-m ${proto:-tcp -p tcp} --sport $value --dport $value";; + *) unset "$var"; return 0;; + esac + ports=1 + ;; + *:connbytes) + value="$(echo "$value" | sed -e 's,-,:,g')" + add_insmod xt_connbytes + append "$var" "-m connbytes --connbytes $value --connbytes-dir both --connbytes-mode bytes" + ;; + *:comment) + add_insmod xt_comment + append "$var" "-m comment --comment '$value'" + ;; + *:tos) + add_insmod xt_dscp + case "$value" in + !*) append "$var" "-m tos ! --tos $value";; + *) append "$var" "-m tos --tos $value" + esac + ;; + *:dscp) + add_insmod xt_dscp + dscp_option="--dscp" + [ -z "${value%%[EBCA]*}" ] && dscp_option="--dscp-class" + case "$value" in + !*) append "$var" "-m dscp ! $dscp_option $value";; + *) append "$var" "-m dscp $dscp_option $value" + esac + ;; + *:direction) + value="$(echo "$value" | sed -e 's,-,:,g')" + if [ "$value" = "out" ]; then + append "$var" "-o $device" + elif [ "$value" = "in" ]; then + append "$var" "-i $device" + fi + ;; + *:srciface) + append "$var" "-i $value" + ;; + 1:pktsize) + value="$(echo "$value" | sed -e 's,-,:,g')" + add_insmod xt_length + append "$var" "-m length --length $value" + ;; + 1:limit) + add_insmod xt_limit + append "$var" "-m limit --limit $value" + ;; + 1:tcpflags) + case "$proto" in + tcp) append "$var" "-m tcp --tcp-flags ALL $value";; + *) unset $var; return 0;; + esac + ;; + 1:mark) + config_get class "${value##!}" classnr + [ -z "$class" ] && continue; + case "$value" in + !*) append "$var" "-m mark ! --mark $class/0x0f";; + *) append "$var" "-m mark --mark $class/0x0f";; + esac + ;; + 1:TOS) + add_insmod xt_DSCP + config_get TOS "$rule" 'TOS' + suffix="-j TOS --set-tos "${TOS:-"Normal-Service"} + ;; + 1:DSCP) + add_insmod xt_DSCP + config_get DSCP "$rule" 'DSCP' + [ -z "${DSCP%%[EBCA]*}" ] && set_value="--set-dscp-class $DSCP" \ + || set_value="--set-dscp $DSCP" + suffix="-j DSCP $set_value" + ;; + esac + done + append "$var" "$suffix" + case "$ports:$proto" in + 1:) parse_matching_rule "$var" "$section" "$options" "$prefix" "$suffix" "udp";; + esac +} + +config_cb() { + option_cb() { + return 0 + } + + # Section start + case "$1" in + interface) + config_set "$2" "classgroup" "Default" + config_set "$2" "upload" "128" + ;; + classify|default|reclassify) + option_cb() { + append options "$1" + } + ;; + esac + + # Section end + config_get TYPE "$CONFIG_SECTION" TYPE + case "$TYPE" in + interface) + config_get_bool enabled "$CONFIG_SECTION" enabled 1 + [ 1 -eq "$enabled" ] || return 0 + config_get classgroup "$CONFIG_SECTION" classgroup + config_set "$CONFIG_SECTION" ifbdev "$C" + C=$(($C+1)) + append INTERFACES "$CONFIG_SECTION" + config_set "$classgroup" enabled 1 + config_get device "$CONFIG_SECTION" device + [ -z "$device" ] && { + device="$(find_ifname ${CONFIG_SECTION})" + config_set "$CONFIG_SECTION" device "$device" + } + ;; + classgroup) append CG "$CONFIG_SECTION";; + classify|default|reclassify) + case "$TYPE" in + classify) var="ctrules";; + *) var="rules";; + esac + config_get target "$CONFIG_SECTION" target + config_set "$CONFIG_SECTION" options "$options" + append "$var" "$CONFIG_SECTION" + unset options + ;; + esac +} + + +enum_classes() { + local c="0" + config_get classes "$1" classes + config_get default "$1" default + for class in $classes; do + c="$(($c + 1))" + config_set "${class}" classnr $c + case "$class" in + $default) class_default=$c;; + esac + done + class_default="${class_default:-$c}" +} + +cls_var() { + local varname="$1" + local class="$2" + local name="$3" + local type="$4" + local default="$5" + local tmp tmp1 tmp2 + config_get tmp1 "$class" "$name" + config_get tmp2 "${class}_${type}" "$name" + tmp="${tmp2:-$tmp1}" + tmp="${tmp:-$tmp2}" + export ${varname}="${tmp:-$default}" +} + +tcrules() { + _dir=/usr/lib/qos + [ -e $_dir/tcrules.awk ] || _dir=. + echo "$cstr" | awk \ + -v device="$dev" \ + -v linespeed="$rate" \ + -v direction="$dir" \ + -f $_dir/tcrules.awk +} + +start_interface() { + local iface="$1" + local num_ifb="$2" + config_get device "$iface" device + config_get_bool enabled "$iface" enabled 1 + [ -z "$device" -o 1 -ne "$enabled" ] && { + return 1 + } + config_get upload "$iface" upload + config_get_bool halfduplex "$iface" halfduplex + config_get download "$iface" download + config_get classgroup "$iface" classgroup + config_get_bool overhead "$iface" overhead 0 + + download="${download:-${halfduplex:+$upload}}" + enum_classes "$classgroup" + for dir in ${halfduplex:-up} ${download:+down}; do + case "$dir" in + up) + [ "$overhead" = 1 ] && upload=$(($upload * 98 / 100 - (15 * 128 / $upload))) + dev="$device" + rate="$upload" + dl_mode="" + prefix="cls" + ;; + down) + [ "$(ls -d /proc/sys/net/ipv4/conf/ifb* 2>&- | wc -l)" -ne "$num_ifb" ] && add_insmod ifb numifbs="$num_ifb" + config_get ifbdev "$iface" ifbdev + [ "$overhead" = 1 ] && download=$(($download * 98 / 100 - (80 * 1024 / $download))) + dev="ifb$ifbdev" + rate="$download" + dl_mode=1 + prefix="d_cls" + ;; + *) continue;; + esac + cstr= + for class in $classes; do + cls_var pktsize "$class" packetsize $dir 1500 + cls_var pktdelay "$class" packetdelay $dir 0 + cls_var maxrate "$class" limitrate $dir 100 + cls_var prio "$class" priority $dir 1 + cls_var avgrate "$class" avgrate $dir 0 + cls_var qdisc "$class" qdisc $dir "" + cls_var filter "$class" filter $dir "" + config_get classnr "$class" classnr + append cstr "$classnr:$prio:$avgrate:$pktsize:$pktdelay:$maxrate:$qdisc:$filter" "$N" + done + append ${prefix}q "$(tcrules)" "$N" + export dev_${dir}="ifconfig $dev up >&- 2>&- +tc qdisc del dev $dev root >&- 2>&- +tc qdisc add dev $dev root handle 1: hfsc default ${class_default}0 +tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${rate}kbit" + done + [ -n "$download" ] && { + add_insmod cls_u32 + add_insmod em_u32 + add_insmod act_connmark + add_insmod act_mirred + add_insmod sch_ingress + } + if [ -n "$halfduplex" ]; then + export dev_up="tc qdisc del dev $device root >&- 2>&- +tc qdisc add dev $device root handle 1: hfsc +tc filter add dev $device parent 1: prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb$ifbdev" + elif [ -n "$download" ]; then + append dev_${dir} "tc qdisc del dev $device ingress >&- 2>&- +tc qdisc add dev $device ingress +tc filter add dev $device parent ffff: prio 1 u32 match u32 0 0 flowid 1:1 action connmark action mirred egress redirect dev ifb$ifbdev" "$N" + fi + add_insmod cls_fw + add_insmod sch_hfsc + + cat < 0)) linespeed = 128 + FS=":" + n = 0 +} + +($1 != "") { + n++ + class[n] = $1 + prio[n] = $2 + avgrate[n] = ($3 * linespeed / 100) + pktsize[n] = $4 + delay[n] = $5 + maxrate[n] = ($6 * linespeed / 100) + qdisc[n] = $7 + filter[n] = $8 +} + +END { + allocated = 0 + maxdelay = 0 + + for (i = 1; i <= n; i++) { + # set defaults + if (!(pktsize[i] > 0)) pktsize[i] = 1500 + if (!(prio[i] > 0)) prio[i] = 1 + + allocated += avgrate[i] + sum_prio += prio[i] + if ((avgrate[i] > 0) && !(delay[i] > 0)) { + sum_rtprio += prio[i] + } + } + + # allocation of m1 in rt classes: + # sum(d * m1) must not exceed dmax * (linespeed - allocated) + dmax = 0 + for (i = 1; i <= n; i++) { + if (avgrate[i] > 0) { + rtm2[i] = avgrate[i] + if (delay[i] > 0) { + d[i] = delay[i] + } else { + d[i] = 2 * pktsize[i] * 1000 / (linespeed * 1024) + if (d[i] > dmax) dmax = d[i] + } + } + } + + ds_avail = dmax * (linespeed - allocated) + for (i = 1; i <= n; i++) { + lsm1[i] = 0 + rtm1[i] = 0 + lsm2[i] = linespeed * prio[i] / sum_prio + if ((avgrate[i] > 0) && (d[i] > 0)) { + if (!(delay[i] > 0)) { + ds = ds_avail * prio[i] / sum_rtprio + ds_avail -= ds + rtm1[i] = rtm2[i] + ds/d[i] + } + lsm1[i] = rtm1[i] + } + else { + d[i] = 0 + } + } + + # main qdisc + for (i = 1; i <= n; i++) { + printf "tc class add dev "device" parent 1:1 classid 1:"class[i]"0 hfsc" + if (rtm1[i] > 0) { + printf " rt m1 " int(rtm1[i]) "kbit d " int(d[i] * 1000) "us m2 " int(rtm2[i])"kbit" + } + printf " ls m1 " int(lsm1[i]) "kbit d " int(d[i] * 1000) "us m2 " int(lsm2[i]) "kbit" + print " ul rate " int(maxrate[i]) "kbit" + } + + # leaf qdisc + avpkt = 1200 + for (i = 1; i <= n; i++) { + print "tc qdisc add dev "device" parent 1:"class[i]"0 handle "class[i]"00: fq_codel limit 800 quantum 300 noecn" + } + + # filter rule + for (i = 1; i <= n; i++) { + filter_cmd = "tc filter add dev "device" parent 1: prio %d handle %s fw flowid 1:%d0\n"; + if (direction == "up") { + filter_1 = sprintf("0x%x0/0xf0", class[i]) + filter_2 = sprintf("0x0%x/0x0f", class[i]) + } else { + filter_1 = sprintf("0x0%x/0x0f", class[i]) + filter_2 = sprintf("0x%x0/0xf0", class[i]) + } + + printf filter_cmd, class[i] * 2, filter_1, class[i] + printf filter_cmd, class[i] * 2 + 1, filter_2, class[i] + + filterc=1 + if (filter[i] != "") { + print " tc filter add dev "device" parent "class[i]"00: handle "filterc"0 "filter[i] + filterc=filterc+1 + } + } +} + From bca0dc47de2fc4b0aa36e524fd93165dccc4da13 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 10 Jun 2018 22:16:46 +0200 Subject: [PATCH 100/307] Add timeout for obs --- shadowsocks-libev/files/shadowsocks-libev.init | 1 + 1 file changed, 1 insertion(+) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index bdbf69090..4734f37d5 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -87,6 +87,7 @@ ss_mkjson_ss_local_conf() { [ -z "$obfs_uri" ] || obfs_options="$obfs_options --obfs-uri $obfs_uri" [ "$fast_open" = 1 ] && obfs_options="$obfs_options --fast-open" [ "$mptcp" = 1 ] && obfs_options="$obfs_options --mptcp" + [ -z "$timeout" ] || obfs_options="$obfs_options --timeout $timeout" cat <<-EOF ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local $obfs_options${q},} EOF From 26a5a7bf554e9e7968d503dd166349ae391f5984 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 10:21:48 +0200 Subject: [PATCH 101/307] Add VPN choice in wizard --- .../luasrc/controller/openmptcprouter.lua | 21 ++++++++++++++----- .../luasrc/view/openmptcprouter/wizard.htm | 19 +++++++++++++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 3cfca4c30..5c0d156b0 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -94,15 +94,26 @@ function wizard_add() ucic:commit("shadowsocks-libev") end + -- Get VPN set by default + local default_vpn = luci.http.formvalue("default") or "glorytun_tcp" + -- Set Glorytun TCP settings local glorytun_key = luci.http.formvalue("glorytun_key") if glorytun_key ~= "" then ucic:set("glorytun","vpn","port","65001") ucic:set("glorytun","vpn","key",glorytun_key) - ucic:set("glorytun","vpn","enable",1) + if default_vpn:match("^glorytun.*") then + ucic:set("glorytun","vpn","enable",1) + else + ucic:set("glorytun","vpn","enable",0) + end ucic:set("glorytun","vpn","mptcp",1) ucic:set("glorytun","vpn","chacha20",1) - ucic:set("glorytun","vpn","proto","tcp") + if default_vpn == "glorytun_udp" then + ucic:set("glorytun","vpn","proto","udp") + else + ucic:set("glorytun","vpn","proto","tcp") + end ucic:save("glorytun") ucic:commit("glorytun") else @@ -116,10 +127,10 @@ function wizard_add() -- Set MLVPN settings local mlvpn_password = luci.http.formvalue("mlvpn_password") if mlvpn_password ~= "" then - if glorytun_key ~= "" then - ucic:set("mlvpn","general","enable",0) - else + if default_vpn == "mlvpn" then ucic:set("mlvpn","general","enable",1) + else + ucic:set("mlvpn","general","enable",0) end ucic:set("mlvpn","general","password",mlvpn_password) ucic:set("mlvpn","general","firstport","65201") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index b461f416f..bcfd20c6f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -43,7 +43,7 @@
help - <%:Glorytun is used for UDP and ICMP%> + <%:Glorytun TCP is used by default for UDP and ICMP%>
@@ -54,7 +54,22 @@
help - <%:MLVPN can replace Glorytun with connection with same latency%> + <%:MLVPN can replace Glorytun with connections with same latency%> +
+
+
+
+ +
+ +
+
+ help + <%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%>
From a6fb78ada5ecaba56cb9def2e24c2465c63f9d43 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 10:22:49 +0200 Subject: [PATCH 102/307] Change fullmesh MPTCP default settings --- mptcp/files/etc/uci-defaults/mptcp-defaults | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index ba47e4163..8224bc0e8 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -24,7 +24,7 @@ fi if [ "$(uci -q show network.globals | grep mptcp_fullmesh)" = "" ]; then uci -q batch <<-EOF set network.globals.mptcp_fullmesh_num_subflows=1 - set network.globals.mptcp_fullmesh_create_on_err=0 + set network.globals.mptcp_fullmesh_create_on_err=1 set network.globals.mptcp_ndiffports_num_subflows=1 commit network EOF From e0a6c8f282ef143a6fbb3c59f21cdab9097409f2 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 10:47:51 +0200 Subject: [PATCH 103/307] Fix omr-tracker shadowsocks was alway using first host --- omr-tracker/files/bin/omr-tracker-ss | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 0b74f1b0e..374b3fa7b 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -19,9 +19,12 @@ nodns=0 last=0 while true; do - host=${hosts%% *} + host="${hosts%% *}" + [ "$host" = "$hosts" ] || { + hosts="${hosts#* } $host" + } if curl -s --socks5 "${proxy}" --max-time "${timeout}" "$host" &>/dev/null ; then - [ "${last}" -gt 0 ] && log "Shadowsocks is up (can contact ${host})" + [ "${last}" -gt "${retry}" ] && log "Shadowsocks is up (can contact ${host})" /etc/init.d/shadowsocks-libev rules_up 2> /dev/null last=0 else From 7b5cc9b9b41cc8e83d3b7409148f01c20e333b47 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 10:49:07 +0200 Subject: [PATCH 104/307] Change default ShadowSocks timeout --- .../files/etc/uci-defaults/1930-omr-shadowsocks | 16 ++++++++++++++-- shadowsocks-libev/files/shadowsocks-libev.config | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 66468e9e6..4c2bc2a3e 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -10,16 +10,28 @@ if [ "$NBCPU" -gt 2 ]; then set shadowsocks-libev.hi$c.local_address="0.0.0.0" set shadowsocks-libev.hi$c.local_port=1100 set shadowsocks-libev.hi$c.mode=tcp_and_udp - set shadowsocks-libev.hi$c.timeout=60 + set shadowsocks-libev.hi$c.timeout=200 set shadowsocks-libev.hi$c.fast_open=1 set shadowsocks-libev.hi$c.reuse_port=1 set shadowsocks-libev.hi$c.mptcp=1 set shadowsocks-libev.hi$c.verbose=0 commit shadowsocks-libev EOF - rm -f /tmp/luci-indexcache done fi fi +if [ "$(uci -q get shadowsocks-libev.hi.timeout)" = "200" ]; then + uci -q batch <<-EOF > /dev/null + set shadowsocks-libev.hi.timeout=200 + commit shadowsocks-libev + EOF + for c in $(seq 2 $NBCPU); do + uci -q batch <<-EOF > /dev/null + set shadowsocks-libev.hi$c.timeout=200 + commit shadowsocks-libev + EOF + done +fi +rm -f /tmp/luci-indexcache exit 0 diff --git a/shadowsocks-libev/files/shadowsocks-libev.config b/shadowsocks-libev/files/shadowsocks-libev.config index f037f7c49..4b81b2cea 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.config +++ b/shadowsocks-libev/files/shadowsocks-libev.config @@ -3,7 +3,7 @@ config ss_redir hi option local_address '::' option local_port '1100' option mode 'tcp_and_udp' - option timeout '60' + option timeout '200' option fast_open 1 option verbose 0 option reuse_port 1 @@ -15,7 +15,7 @@ config ss_redir hi2 option local_address '0.0.0.0' option local_port '1100' option mode 'tcp_and_udp' - option timeout '60' + option timeout '200' option fast_open 1 option verbose 0 option reuse_port 1 From d98da73c9c0bb2cd0078c12cd8975c0970fb2675 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 12:31:41 +0200 Subject: [PATCH 105/307] Test latest MLVPN from markfoodyburton --- mlvpn/Makefile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mlvpn/Makefile b/mlvpn/Makefile index 9b14ee449..c477b8c86 100644 --- a/mlvpn/Makefile +++ b/mlvpn/Makefile @@ -8,17 +8,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mlvpn -PKG_VERSION:=6f13423b -#PKG_VERSION:=238ae265 +#PKG_VERSION:=6f13423b +PKG_VERSION:=8002488 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git -PKG_SOURCE_VERSION:=6f13423b8108f46edb9f230deee20e3741abe64c -PKG_SOURCE_DATE:=2017-09-01 -#PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git -#PKG_SOURCE_VERSION:=238ae26563740390f3e1eb0e2c83a7d0dc4e920f -#PKG_SOURCE_DATE:=2018-05-31 +#PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git +#PKG_SOURCE_VERSION:=6f13423b8108f46edb9f230deee20e3741abe64c +#PKG_SOURCE_DATE:=2017-09-01 +PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git +PKG_SOURCE_VERSION:=8002488c20438c51fb68fa51f7df115dd2f7dafb +PKG_SOURCE_DATE:=2018-06-11 PKG_LICENSE:=BSD-2-Clause PKG_MAINTAINER:=Ycarus (Yannick Chabanois) From 40a05d4054d93a691d13fda1c67cffce71f3edb3 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 14:16:03 +0200 Subject: [PATCH 106/307] back to MLVPN normal, crash on RPI3 with previous version --- mlvpn/Makefile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mlvpn/Makefile b/mlvpn/Makefile index c477b8c86..aeb080cf0 100644 --- a/mlvpn/Makefile +++ b/mlvpn/Makefile @@ -8,17 +8,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mlvpn -#PKG_VERSION:=6f13423b -PKG_VERSION:=8002488 +PKG_VERSION:=6f13423b +#PKG_VERSION:=8002488 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -#PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git -#PKG_SOURCE_VERSION:=6f13423b8108f46edb9f230deee20e3741abe64c -#PKG_SOURCE_DATE:=2017-09-01 -PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git -PKG_SOURCE_VERSION:=8002488c20438c51fb68fa51f7df115dd2f7dafb -PKG_SOURCE_DATE:=2018-06-11 +PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git +PKG_SOURCE_VERSION:=6f13423b8108f46edb9f230deee20e3741abe64c +PKG_SOURCE_DATE:=2017-09-01 +#PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git +#PKG_SOURCE_VERSION:=8002488c20438c51fb68fa51f7df115dd2f7dafb +#PKG_SOURCE_DATE:=2018-06-11 PKG_LICENSE:=BSD-2-Clause PKG_MAINTAINER:=Ycarus (Yannick Chabanois) From acea842fbdb3bfa565a8b2c502c9a2a8035552f1 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 11 Jun 2018 14:16:47 +0200 Subject: [PATCH 107/307] Remove prefetch DNS --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 7 ------- 1 file changed, 7 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 7f42aeeba..db7d4e345 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -6,13 +6,6 @@ if [ "$(uci -q get unbound.@unbound[0].listen_port | grep 5353)" = "" ]; then set unbound.@unbound[-1].protocol="ip4_only" set unbound.@unbound[-1].enabled=1 set unbound.@unbound[-1].recursion="aggressive" - set unbound.@unbound[-1].prefetch_root=1 - commit unbound - EOF -fi -if [ "$(uci -q get unbound.@unbound[0].prefetch_root)" = "" ]; then - uci -q batch <<-EOF >/dev/null - set unbound.@unbound[-1].prefetch_root=1 commit unbound EOF fi From 4e858a0ff9c00a2b00c5b9af2309c5691b9cae8e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 19:22:55 +0200 Subject: [PATCH 108/307] Add OpenVPN support --- .../luasrc/controller/openmptcprouter.lua | 32 +++++++++++++++++-- .../luasrc/view/openmptcprouter/wizard.htm | 26 +++++++++++++-- .../files/etc/uci-defaults/2020-omr-vpn | 12 +++++++ 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 5c0d156b0..46f6049f5 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -1,6 +1,7 @@ local tools = require "luci.tools.status" local sys = require "luci.sys" local json = require("luci.json") +local fs = require("nixio.fs") local ucic = luci.model.uci.cursor() module("luci.controller.openmptcprouter", package.seeall) @@ -76,6 +77,8 @@ function wizard_add() ucic:set("shadowsocks-libev","sss0","server",server_ip) ucic:set("glorytun","vpn","host",server_ip) ucic:set("mlvpn","general","host",server_ip) + luci.sys.call("uci -q del openvpn.omr.remote") + luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) end -- Set ShadowSocks settings @@ -95,7 +98,7 @@ function wizard_add() end -- Get VPN set by default - local default_vpn = luci.http.formvalue("default") or "glorytun_tcp" + local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" -- Set Glorytun TCP settings local glorytun_key = luci.http.formvalue("glorytun_key") @@ -144,6 +147,31 @@ function wizard_add() ucic:commit("mlvpn") end + local openvpn_key = luci.http.formvalue("openvpn_key") + if openvpn_key ~= "" then + local openvpn_key_path = "/etc/luci-uploads/openvpn.key" + local fp + luci.http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "openvpn_key" then + fp = io.open(openvpn_key_path, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() + end + end) + ucic:set("openvpn","omr","secret",openvpn_key_path) + ucic:commit("openvpn") + end + + if default_vpn == "openvpn" then + ucic:set("openvpn","omr","enabled",1) + ucic:commit("openvpn") + end + luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") @@ -279,7 +307,7 @@ function interfaces_status() -- Check openmptcprouter service are running mArray.openmptcprouter["tun_service"] = false - if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") then + if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?mlvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?openvpn?$'"), "%d+") then mArray.openmptcprouter["tun_service"] = true mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn") local tun_dev = uci:get("network","omrvpn","ifname") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index bcfd20c6f..cd99d28a3 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -36,6 +36,7 @@
+ <% if nixio.fs.access("/usr/sbin/glorytun") or nixio.fs.access("/usr/sbin/glorytun-udp") then %>
@@ -47,6 +48,8 @@
+ <% end %> + <% if nixio.fs.access("/usr/sbin/mlvpn") then %>
@@ -58,13 +61,29 @@
+ <% end %> + <% if nixio.fs.access("/usr/sbin/openvpn") then %> +
+ +
+ + " /> +
+
+ help + <%:You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script to use OpenVPN TCP%> +
+
+
+ <% end %>

@@ -133,4 +152,5 @@
+ <%+footer%> diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index 18504bbe0..aa84540ea 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -15,6 +15,18 @@ if [ "$(uci -q get network.omrvpn)" = "" ]; then EOF fi +if [ "$(uci -q get openvpn.omr)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set openvpn.omr=openvpn + set openvpn.omr.dev=tun0 + set openvpn.omr.port=65301 + set openvpn.omr.cipher=AES-256-CBC + set openvpn.omr.proto=tcp-client + set openvpn.omr.compress=lz4 + commit openvpn + EOF +fi + if [ "$(uci -q show firewall | grep omrvpn)" = "" ]; then uci -q batch <<-EOF >/dev/null add_list firewall.zone_vpn.network=omrvpn From 64201d6d86fed393d09363350f96720f33545f46 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 19:23:15 +0200 Subject: [PATCH 109/307] Little fixes --- mptcp/files/etc/uci-defaults/mptcp-defaults | 3 ++- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index 8224bc0e8..07f19b499 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -35,4 +35,5 @@ uci -q batch <<-EOF set ucitrack.@mptcp[-1].init=mptcp add_list ucitrack.@network[-1].affects=mptcp commit ucitrack -EOF \ No newline at end of file +EOF +exit 0 \ No newline at end of file diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index db7d4e345..fd3471f4f 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -15,6 +15,12 @@ if [ "$(uci -q show dhcp | grep 127.0.0.1#5353)" = "" ]; then commit dhcp EOF fi +if [ "$(uci -q get dhcp.@dnsmasq[-1].interface)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add_list dhcp.@dnsmasq[-1].interface="lan" + commit dhcp + EOF +fi rm -f /tmp/luci-indexcache exit 0 From f536748542f674cc636f4651611350f19e92a18e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 19:26:32 +0200 Subject: [PATCH 110/307] Disable a VPN when not set as default --- .../luasrc/controller/openmptcprouter.lua | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 46f6049f5..d66ae64fb 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -100,16 +100,21 @@ function wizard_add() -- Get VPN set by default local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" - -- Set Glorytun TCP settings + -- Set Glorytun settings + if default_vpn:match("^glorytun.*") then + ucic:set("glorytun","vpn","enable",1) + ucic:save("glorytun") + ucic:commit("glorytun") + else + ucic:set("glorytun","vpn","enable",0) + ucic:save("glorytun") + ucic:commit("glorytun") + end + local glorytun_key = luci.http.formvalue("glorytun_key") if glorytun_key ~= "" then ucic:set("glorytun","vpn","port","65001") ucic:set("glorytun","vpn","key",glorytun_key) - if default_vpn:match("^glorytun.*") then - ucic:set("glorytun","vpn","enable",1) - else - ucic:set("glorytun","vpn","enable",0) - end ucic:set("glorytun","vpn","mptcp",1) ucic:set("glorytun","vpn","chacha20",1) if default_vpn == "glorytun_udp" then @@ -128,13 +133,18 @@ function wizard_add() end -- Set MLVPN settings + if default_vpn == "mlvpn" then + ucic:set("mlvpn","general","enable",1) + ucic:save("mlvpn") + ucic:commit("mlvpn") + else + ucic:set("mlvpn","general","enable",0) + ucic:save("mlvpn") + ucic:commit("mlvpn") + end + local mlvpn_password = luci.http.formvalue("mlvpn_password") if mlvpn_password ~= "" then - if default_vpn == "mlvpn" then - ucic:set("mlvpn","general","enable",1) - else - ucic:set("mlvpn","general","enable",0) - end ucic:set("mlvpn","general","password",mlvpn_password) ucic:set("mlvpn","general","firstport","65201") ucic:set("mlvpn","general","interface_name","mlvpn0") @@ -169,6 +179,11 @@ function wizard_add() if default_vpn == "openvpn" then ucic:set("openvpn","omr","enabled",1) + ucic:save("openvpn") + ucic:commit("openvpn") + else + ucic:set("openvpn","omr","enabled",0) + ucic:save("openvpn") ucic:commit("openvpn") end From fa085dcdca79ad93d7045204c57e8d0edefc7457 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 19:30:24 +0200 Subject: [PATCH 111/307] Fix 6in4 support for MLVPN and OpenVPN --- omr-6in4/files/etc/init.d/omr-6in4 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index d782421a1..c5e4ad41f 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -9,7 +9,13 @@ service_triggers() { } reload_service() { - iface=$(uci -q get glorytun.vpn.dev) + if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then + iface=$(uci -q get glorytun.vpn.dev) + elif [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then + iface=$(uci -q get mlvpn.general.interface_name) + elif [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then + iface=$(uci -q get openvpn.omr.dev) + fi addr=$(ubus call network.interface.omrvpn status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") peer=$(ubus call network.interface.omrvpn status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") From 2a4e62a32083d9c50f02ebed8f52f2832ddc34ef Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 22:43:12 +0200 Subject: [PATCH 112/307] Remove static ip of Glorytun if already set --- openmptcprouter/files/etc/uci-defaults/2020-omr-vpn | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index aa84540ea..bc76d7b45 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -15,6 +15,13 @@ if [ "$(uci -q get network.omrvpn)" = "" ]; then EOF fi +if [ "$(uci -q get glorytun.vpn.localip)" = "10.0.0.2" ]; then + uci -q batch <<-EOF >/dev/null + delete glorytun.vpn.localip + delete glorytun.vpn.remoteip + EOF +fi + if [ "$(uci -q get openvpn.omr)" = "" ]; then uci -q batch <<-EOF >/dev/null set openvpn.omr=openvpn From ea1647a1ebcbc454fe394f4a9bda69f6fad36251 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 22:55:32 +0200 Subject: [PATCH 113/307] Update README --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1be6b4eb0..5a064aa80 100644 --- a/README.md +++ b/README.md @@ -104,4 +104,12 @@ Interface to omr-tracker. *Description:* An ICMPv6 neighbour discovery tool -This is used to check if there is no other IPv6 route announced on the network \ No newline at end of file +This is used to check if there is no other IPv6 route announced on the network + +## mlvpn +*Source:* [http://www.remlab.net/files/ndisc6](http://www.remlab.net/files/ndisc6) + +*Description:* Multi-link VPN + +This is an other way to aggregate same latency connections + From a3abdd34e42854d3ca8df0bdd88840e8edd2e0e7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 12 Jun 2018 23:07:33 +0200 Subject: [PATCH 114/307] Add openvpn and update packages version --- omr-6in4/Makefile | 2 +- openmptcprouter-full/Makefile | 3 ++- openmptcprouter/Makefile | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/omr-6in4/Makefile b/omr-6in4/Makefile index 71c8da8c4..82b4114e0 100644 --- a/omr-6in4/Makefile +++ b/omr-6in4/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=omr-6in4 -PKG_VERSION:=0.2 +PKG_VERSION:=0.3 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 048c75fed..68042d398 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter-full -PKG_VERSION:=0.7 +PKG_VERSION:=0.8 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk @@ -40,6 +40,7 @@ MY_DEPENDS := \ luci-proto-3g \ luci-app-mlvpn mlvpn \ omr-update \ + openvpn-openssl \ kmod-rt2800-usb libimobiledevice \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim diff --git a/openmptcprouter/Makefile b/openmptcprouter/Makefile index 28ce65440..13dd412a7 100644 --- a/openmptcprouter/Makefile +++ b/openmptcprouter/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter -PKG_VERSION:=0.91 +PKG_VERSION:=0.92 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk From e5c14c7a23dcb6acd3b61e67cde8723acc58b45d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 13 Jun 2018 08:36:20 +0200 Subject: [PATCH 115/307] Fix sysctl settings --- .../luasrc/controller/openmptcprouter.lua | 4 ++-- .../root/etc/sysctl.d/zzz_openmptcprouter.conf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index d66ae64fb..9b6b80276 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -202,12 +202,12 @@ function settings_add() -- Set tcp_keepalive_time local tcp_keepalive_time = luci.http.formvalue("tcp_keepalive_time") luci.sys.exec("sysctl -w net.ipv4.tcp_keepalive_time=%s" % tcp_keepalive_time) - luci.sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time = [0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) + luci.sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time=[0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) -- Disable IPv6 local disable_ipv6 = luci.http.formvalue("disable_ipv6") or 0 luci.sys.exec("sysctl -w net.ipv6.conf.all.disable_ipv6=%s" % disable_ipv6) - luci.sys.exec("sed -i 's:^net.ipv6.conf.all.disable_ipv6 = [0-9]*:net.ipv6.conf.all.disable_ipv6=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % disable_ipv6) + luci.sys.exec("sed -i 's:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % disable_ipv6) ucic:set("firewall",ucic:get_first("firewall","defaults"),"disable_ipv6",disable_ipv6) ucic:save("firewall") ucic:commit("firewall") diff --git a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf index 12e1506ee..e8a345cee 100644 --- a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf +++ b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf @@ -1,2 +1,2 @@ -net.ipv4.tcp_keepalive_time = 1200 -net.ipv6.conf.all.disable_ipv6 = 0 \ No newline at end of file +net.ipv4.tcp_keepalive_time=1200 +net.ipv6.conf.all.disable_ipv6=0 \ No newline at end of file From cbad38d5907729c2df6e9c92c8d55fdaf8d3ae44 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 13 Jun 2018 08:38:02 +0200 Subject: [PATCH 116/307] Fix MLVPN source in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a064aa80..4a26144f8 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Interface to omr-tracker. This is used to check if there is no other IPv6 route announced on the network ## mlvpn -*Source:* [http://www.remlab.net/files/ndisc6](http://www.remlab.net/files/ndisc6) +*Source:* [https://github.com/zehome/MLVPN](https://github.com/zehome/MLVPN) *Description:* Multi-link VPN From cb3a61f2795463ac546925df991829ee6e0f0e17 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 13 Jun 2018 09:37:05 +0200 Subject: [PATCH 117/307] OMR-Bypass only work when Shadowsocks is enabled for now --- luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index ab8442f04..e923e2249 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -13,7 +13,7 @@

<%:Bypass%>

-
<%:Set domains name, ips or networks you want to bypass.%>
+
<%:Set domains name, ips or networks you want to bypass. This only work when ShadowSocks is enabled.%>
From fc5ef2c397decb6238beebd9c1b17afe00750a99 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 13 Jun 2018 10:47:48 +0200 Subject: [PATCH 118/307] Fix upload OpenVPN key --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index cd99d28a3..cecfe55a2 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -8,7 +8,7 @@ <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> -
+

<%:Wizard%>

From 06bc6ac46b92ccb24fdd45941bab4e8121ab9f9d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 06:22:24 +0200 Subject: [PATCH 119/307] Only a warning if ShadowSocks is disabled and fix --- .../luasrc/controller/openmptcprouter.lua | 8 ++++- .../luasrc/view/openmptcprouter/wanstatus.htm | 33 ++++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 9b6b80276..a64924173 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -263,7 +263,7 @@ function get_ip(interface) end function get_gateway(interface) - local gateway = nil + local gateway = "" local dump = nil dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) @@ -350,6 +350,12 @@ function interfaces_status() mArray.openmptcprouter["socks_service"] = true end + mArray.openmptcprouter["socks_service_enabled"] = true + local ss_server = uci:get("shadowsocks-libev","sss0","disabled") or "0" + if ss_server == "1" then + mArray.openmptcprouter["socks_service_enabled"] = false + end + -- Add DHCP infos by parsing dnsmasq config file mArray.openmptcprouter.dhcpd = {} dnsmasq = ut.trim(sys.exec("cat /var/etc/dnsmasq.conf*")) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 7d6f64ddc..c1a491544 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -102,12 +102,14 @@ temp += String.format('lan (%s)', mArray.openmptcprouter.local_addr); } - if (mArray.openmptcprouter.socks_service == false) - { - statusMessage += 'ShadowSocks is not running
'; - } else if (mArray.openmptcprouter.ss_addr == "") - { - statusMessage += 'ShadowSocks not working
'; + if (mArray.openmptcprouter.socks_service_enabled == true) { + if (mArray.openmptcprouter.socks_service == false) + { + statusMessage += 'ShadowSocks is not running
'; + } else if (mArray.openmptcprouter.ss_addr == "") + { + statusMessage += 'ShadowSocks not working
'; + } } if (mArray.openmptcprouter.tun_service == false) { @@ -126,11 +128,20 @@ { statusMessageClass = "error"; statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png"; - } else if (mArray.openmptcprouter.tun_state == "DOWN") - { - statusMessageClass = "warning"; - statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; - statusMessage += 'Glorytun VPN tunnel DOWN'; + } else { + if (mArray.openmptcprouter.socks_service_enabled == false) + { + statusMessage += 'ShadowSocks is DISABLED
'; + } + if (mArray.openmptcprouter.tun_state == "DOWN") + { + statusMessage += 'VPN tunnel DOWN
'; + } + if (statusMessage !== "") + { + statusMessageClass = "warning"; + statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; + } } temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content); temp += '' From e34a06b5d78cccc422d997d6dda83ba6464d073c Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 07:06:53 +0200 Subject: [PATCH 120/307] No need to track ShadowSocks when ShadowSocks is disabled --- omr-tracker/files/etc/init.d/omr-tracker | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 75e21bcbe..bbb4a572a 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -71,6 +71,7 @@ _initialize_shadowsocks_tracker() { config_get redir_tcp ss_rules redir_tcp config_get server $redir_tcp server config_get tracker_server "tracker" server + config_get ss_disabled $server disabled 0 [ "$server" = "$tracker_server" ] || { [ -z "$tracker_server" ] && { uci -q batch <<-EOF >/dev/null @@ -122,18 +123,21 @@ _launch_shadowsocks_tracker() { } start_service() { + local ss_disabled config_load shadowsocks-libev _initialize_shadowsocks_tracker config_load network config_foreach _launch_tracker interface - config_load shadowsocks-libev - config_foreach _launch_shadowsocks_tracker ss_local + if [ "$ss_disabled" != "1" ]; then + config_load shadowsocks-libev + config_foreach _launch_shadowsocks_tracker ss_local + fi } service_triggers() { - procd_add_reload_trigger omr-tracker network + procd_add_reload_trigger omr-tracker network shadowsocks-libev } reload_service() { From 4b7c39bd032450c3db6d39351e69d42fc44eefd1 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 07:07:29 +0200 Subject: [PATCH 121/307] OpenVPN is disabled by default --- openmptcprouter/files/etc/uci-defaults/2020-omr-vpn | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index bc76d7b45..f75612766 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -30,6 +30,7 @@ if [ "$(uci -q get openvpn.omr)" = "" ]; then set openvpn.omr.cipher=AES-256-CBC set openvpn.omr.proto=tcp-client set openvpn.omr.compress=lz4 + set openvpn.omr.enabled=0 commit openvpn EOF fi From 1427fe3a1539beea8e52b7429f74eed1858dfe0a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 07:17:40 +0200 Subject: [PATCH 122/307] Test to add VPN bypass even when ShadowSocks is disabled --- .../root/etc/init.d/omr-bypass | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index f6f37059e..e15c73b74 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -1,13 +1,9 @@ #!/bin/sh /etc/rc.common -# shellcheck disable=SC2039 -# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : +# Copyright (C) 2018 Ycarus (Yannick Chabanois) -# shellcheck disable=SC2034 -{ - START=90 - STOP=10 - USE_PROCD=1 -} +START=90 +STOP=10 +USE_PROCD=1 _bypass_ip() { local ip="$1" @@ -15,8 +11,22 @@ _bypass_ip() { } start_service() { + ipset -q --exist restore <<-EOF + flush ss_rules_dst_bypass + create ss_rules_dst_bypass hash:net hashsize 64 + EOF + config_load omr-bypass config_list_foreach ips "ip" _bypass_ip + + ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1 + if [ "$(iptables -t mangle -L | grep 'mark 0x539')" = "" ]; then + iptables-restore --noflush <<-EOF + *mangle + -A PREROUTING -m set --match-set ss_rules_dst_bypass dst -j MARK --set-mark 0x539 + COMMIT + EOF + fi } service_triggers() { @@ -24,6 +34,5 @@ service_triggers() { } reload_service() { - stop start } From a73eafd6c9578a9779e1d447cc194e6ceacbb08e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 15:21:03 +0200 Subject: [PATCH 123/307] Disable router IPv6 send when IPv6 is disabled --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index a64924173..ab2f83701 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -211,6 +211,9 @@ function settings_add() ucic:set("firewall",ucic:get_first("firewall","defaults"),"disable_ipv6",disable_ipv6) ucic:save("firewall") ucic:commit("firewall") + ucic:set("dhcp","lan","ra_default",disable_ipv6) + ucic:save("dhcp") + ucic:commit("dhcp") if disable_ipv6 == 1 then ucic:set("shadowsocks-libev","hi","local_address","0.0.0.0") else From f79f9204d0bff2d108b0857584a4da0e1a088eb0 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 15:38:31 +0200 Subject: [PATCH 124/307] bypass work even if ShadowSocks is disabled now --- luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index e923e2249..ab8442f04 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -13,7 +13,7 @@

<%:Bypass%>

-
<%:Set domains name, ips or networks you want to bypass. This only work when ShadowSocks is enabled.%>
+
<%:Set domains name, ips or networks you want to bypass.%>
From a0c21d570e5adc3cc704c320c3a8a2ddf09f9ddb Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 22:39:42 +0200 Subject: [PATCH 125/307] Fix tcp keepalive change --- .../luasrc/controller/openmptcprouter.lua | 6 ++++-- luci-app-openmptcprouter/root/etc/init.d/openmptcprouter | 1 + .../root/etc/sysctl.d/zzz_openmptcprouter.conf | 2 +- shadowsocks-libev/files/shadowsocks-libev.init | 5 +++++ shadowsocks-libev/files/shadowsocks.conf | 4 ++-- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index ab2f83701..682135a58 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -188,8 +188,10 @@ function wizard_add() end luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") - luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") - luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") + --luci.sys.call("/etc/init.d/shadowsocks restart >/dev/null 2>/dev/null") + --luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") + --luci.sys.call("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") + --luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") if gostatus == true then luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status")) else diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index 8a8ee9980..3c195bbcd 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -27,6 +27,7 @@ start_service() { } # remove sysctl already defined in /etc/sysctl.d/ sed -i -e '/tcp_fin_timeout/d' -e '/tcp_keepalive_time/d' -e '/nf_conntrack_max/d' /etc/sysctl.conf + sed -i -e '/tcp_fin_timeout/d' -e '/tcp_keepalive_time/d' -e '/nf_conntrack_max/d' /etc/sysctl.d/10-default.conf } reload_service() { diff --git a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf index e8a345cee..510841c4f 100644 --- a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf +++ b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf @@ -1,2 +1,2 @@ -net.ipv4.tcp_keepalive_time=1200 +net.ipv4.tcp_keepalive_time=2400 net.ipv6.conf.all.disable_ipv6=0 \ No newline at end of file diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 4734f37d5..e03cb4cdf 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -317,6 +317,11 @@ stop_service() { rm -rf "$ss_confdir" } +reload_service() { + stop + start +} + _rules_status() { [ -n "$(iptables -t nat -L | grep ss_rules_forward)" ] && return 1 return 0 diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf index 4e9a29dad..c901598ac 100644 --- a/shadowsocks-libev/files/shadowsocks.conf +++ b/shadowsocks-libev/files/shadowsocks.conf @@ -23,7 +23,7 @@ net.ipv4.tcp_tw_recycle = 0 # short FIN timeout net.ipv4.tcp_fin_timeout = 30 # short keepalive time -net.ipv4.tcp_keepalive_time = 2400 +#net.ipv4.tcp_keepalive_time = 2400 # outbound port range net.ipv4.ip_local_port_range = 10000 65000 # max SYN backlog @@ -37,7 +37,7 @@ net.ipv4.tcp_rmem = 4096 87380 134217728 # TCP write buffer net.ipv4.tcp_wmem = 4096 65536 134217728 # turn on path MTU discovery -net.ipv4.tcp_mtu_probing = 0 +net.ipv4.tcp_mtu_probing = 1 # for low-latency network, use cubic instead # net.ipv4.tcp_congestion_control = balia From 24352f1ad64401bdb31302d8c3fef2e7f42978bc Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 14 Jun 2018 23:09:43 +0200 Subject: [PATCH 126/307] Force restart of services --- .../luasrc/controller/openmptcprouter.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 682135a58..b800db0ea 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -188,10 +188,11 @@ function wizard_add() end luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") - --luci.sys.call("/etc/init.d/shadowsocks restart >/dev/null 2>/dev/null") - --luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") - --luci.sys.call("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") - --luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/shadowsocks restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/openvpn restart >/dev/null 2>/dev/null") if gostatus == true then luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status")) else From 6a2156afd33c7ffd3f98de71a38090753a11d398 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 15 Jun 2018 08:29:35 +0200 Subject: [PATCH 127/307] Fix wizard --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b800db0ea..d3ae4ef7d 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -46,7 +46,7 @@ function wizard_add() gostatus = false end - local delete_intf = luci.http.formvaluetable("delete") + local delete_intf = luci.http.formvaluetable("delete") or "" if delete_intf ~= "" then for intf, _ in pairs(delete_intf) do ucic:delete("network",intf) From 65f9e51e314152cf1f0d6aae187ef66b4212bbf7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 15 Jun 2018 20:52:54 +0200 Subject: [PATCH 128/307] Fix IP reset --- omr-update/files/etc/init.d/omr-update | 4 +++- .../files/etc/uci-defaults/1920-omr-network | 10 +++++++--- .../files/etc/uci-defaults/1930-omr-shadowsocks | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/omr-update/files/etc/init.d/omr-update b/omr-update/files/etc/init.d/omr-update index 421c974e7..a4b0de7dc 100755 --- a/omr-update/files/etc/init.d/omr-update +++ b/omr-update/files/etc/init.d/omr-update @@ -8,15 +8,17 @@ boot() { . /lib/functions/system.sh cd /etc/uci-defaults || return 0 + source /etc/os-release + files="$(ls)" [ -n "$files" ] && { mkdir -p /usr/share/omr-update if [ "$(grep rom /etc/mtab)" = "" ]; then cp /etc/uci-defaults/* /usr/share/omr-update fi + uci -q set openmptcprouter.settings.version=${VERSION} return 0 } - source /etc/os-release if [ "$(uci -q get openmptcprouter.settings.version)" != "${VERSION}" ]; then cd /rom/etc/uci-defaults || cd /usr/share/omr-update || return 0 files="$(ls)" diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network index 79183c6d6..f1163f56a 100755 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ b/openmptcprouter/files/etc/uci-defaults/1920-omr-network @@ -49,7 +49,11 @@ _setup_wan_interface() { [ -n "$4" ] && uci -q set network.$1.type=$4 } -uci -q batch <> /etc/iproute2/rt_tables + echo "50 lan" >> /etc/iproute2/rt_tables fi uci -q set network.lan.ip4table='lan' diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 4c2bc2a3e..c78e1015f 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -21,7 +21,7 @@ if [ "$NBCPU" -gt 2 ]; then fi fi -if [ "$(uci -q get shadowsocks-libev.hi.timeout)" = "200" ]; then +if [ "$(uci -q get shadowsocks-libev.hi.timeout)" != "200" ]; then uci -q batch <<-EOF > /dev/null set shadowsocks-libev.hi.timeout=200 commit shadowsocks-libev From de107813d1197658814a3ea9d1db2c5a9db4a751 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 15 Jun 2018 21:55:07 +0200 Subject: [PATCH 129/307] Fix network creation --- openmptcprouter/files/etc/uci-defaults/1920-omr-network | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network index f1163f56a..499664e0a 100755 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ b/openmptcprouter/files/etc/uci-defaults/1920-omr-network @@ -49,7 +49,7 @@ _setup_wan_interface() { [ -n "$4" ] && uci -q set network.$1.type=$4 } -if [ "$(uci -q get openmptcprouter.settings.version)" != "" ]; then +if [ "$(uci -q get network.lan.multipath)" != "" ]; then exit 0 fi From 9919f87f20dda6d2ead8b610a5230c8fa2f65f24 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 15 Jun 2018 22:40:10 +0200 Subject: [PATCH 130/307] Support interfaces where ifname is not defined in config --- .../luasrc/controller/openmptcprouter.lua | 11 +++++++++++ mptcp/files/etc/init.d/mptcp | 1 + .../files/usr/share/omr/post-tracking.d/post-tracking | 1 + omr-tracker/files/etc/init.d/omr-tracker | 1 + 4 files changed, 14 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index d3ae4ef7d..24ed57859 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -268,6 +268,11 @@ function get_ip(interface) return ip end +function get_device(interface) + local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + return dump['l3_device'] +end + function get_gateway(interface) local gateway = "" local dump = nil @@ -332,6 +337,9 @@ function interfaces_status() mArray.openmptcprouter["tun_service"] = true mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn") local tun_dev = uci:get("network","omrvpn","ifname") + if tun_dev == "" then + tun_dev = get_device("omrvpn") + end if tun_dev ~= "" then local peer = get_gateway("omrvpn") if peer == "" then @@ -418,6 +426,9 @@ function interfaces_status() --if interface == "lo" then return end local ifname = section['ifname'] or "" + if ifname == "" then + ifname = get_device(interface) + end --if multipath == "off" and not ifname:match("^tun.*") then return end if multipath == "off" then return end diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 3f82dab2a..9d7ed0473 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -38,6 +38,7 @@ interface_multipath_settings() { local intf="$2" config_get iface "$config" ifname + [ -z "$iface"] && iface=$(ifstatus "$config" | jsonfilter -e '@["l3_device"]') count=$(($count+1)) id=$count [ -n "$intf" ] && [ "$iface" != "$intf" ] && return 0 diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 5e9b0d296..f2bcc68fa 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -7,6 +7,7 @@ set_route() { PREVINTERFACE=$2 multipath_config=$(uci -q get network.$INTERFACE.multipath || echo "off") interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -e '@["l3_device"]') multipath_current_config=$(multipath $interface_if | grep deactivated) if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then #if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index bbb4a572a..efe216266 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -42,6 +42,7 @@ _launch_tracker() { local ifname ip4table config_get ifname "$1" ifname + [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -e '@["l3_device"]') config_get multipath "$1" multipath config_get gateway "$1" gateway From 301411adc629e58d48af0e8089f0e096d54760bc Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 16 Jun 2018 21:35:17 +0200 Subject: [PATCH 131/307] Fix MPTCP interface choice --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 09a3ceda8..25e13c38f 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -32,7 +32,7 @@ end local mtcpfm_subflows = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses")) mtcpfm_subflows.datatype = "uinteger" mtcpfm_subflows.rmempty = false -local mtcpfm_createonerr = s:option(Value, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) +local mtcpfm_createonerr = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) mtcpfm_createonerr:value(1, translate("enable")) mtcpfm_createonerr:value(0, translate("disable")) From 4d4715702905f0b8be0f0ab9733f657449662f11 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 17 Jun 2018 19:38:57 +0200 Subject: [PATCH 132/307] Add rng-tools --- openmptcprouter-full/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 68042d398..845af485c 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -42,6 +42,7 @@ MY_DEPENDS := \ omr-update \ openvpn-openssl \ kmod-rt2800-usb libimobiledevice \ + rng-tools \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From dc9e238bb933455871c192c378a4da7078d36884 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 17 Jun 2018 22:18:13 +0200 Subject: [PATCH 133/307] Flush bypass rule without error --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index e15c73b74..afa4c6b98 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -11,8 +11,8 @@ _bypass_ip() { } start_service() { + ipset -q flush ss_rules_dst_bypass ipset -q --exist restore <<-EOF - flush ss_rules_dst_bypass create ss_rules_dst_bypass hash:net hashsize 64 EOF From 5e7cf8bd7a19f1eb4ecfedec14d7d93bb5823312 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 10:56:32 +0200 Subject: [PATCH 134/307] Add check that MPTCP is not blocked --- luci-app-openmptcprouter/Makefile | 2 +- .../luasrc/controller/openmptcprouter.lua | 21 +++++++++++++++++-- .../luasrc/view/openmptcprouter/wanstatus.htm | 4 ++++ .../root/bin/omr-mptcp-intf | 10 +++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100755 luci-app-openmptcprouter/root/bin/omr-mptcp-intf diff --git a/luci-app-openmptcprouter/Makefile b/luci-app-openmptcprouter/Makefile index bde3eb374..26de8e19f 100644 --- a/luci-app-openmptcprouter/Makefile +++ b/luci-app-openmptcprouter/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Support for OpenMPTCProuter -LUCI_DEPENDS:=+luci-lib-json +rdisc6 +LUCI_DEPENDS:=+luci-lib-json +rdisc6 +curl PKG_LICENSE:=GPLv3 include ../luci/luci.mk diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 24ed57859..5fba6340c 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -306,11 +306,17 @@ function interfaces_status() mArray.openmptcprouter = {} mArray.openmptcprouter["version"] = ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::'")) -- Check that requester is in same network - mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks", "proxy", "server") or "0.0.0.0" + mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "proxy", "server") or "0.0.0.0" mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr") -- shadowsocksaddr - mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 127.0.0.1:1111 -m 5 http://ip.openmptcprouter.com") + local tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or "" + local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") + if tracker_ip ~= "" then + mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 5 http://ip.openmptcprouter.com") + else + mArray.openmptcprouter["ss_addr"] = "" + end -- wanaddr mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com") @@ -446,6 +452,16 @@ function interfaces_status() connectivity = 'ERROR' end + -- Test if multipath can work on the connection + local multipath_available + local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) + if multipath_available_state == "" then + multipath_available = 'OK' + else + multipath_available = 'ERROR' + end + + -- Detect WAN gateway status local gw_ping = 'UP' if gateway == "" then @@ -509,6 +525,7 @@ function interfaces_status() upload = section['upload'], gw_ping = gw_ping, ipv6_discover = ipv6_discover, + multipath_available = multipath_available, } if ifname:match("^tun.*") then diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index c1a491544..3f75351e1 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -188,6 +188,7 @@ var gateway = mArray.wans[i].gateway; var gw_ping = mArray.wans[i].gw_ping; var ipv6_discover = mArray.wans[i].ipv6_discover; + var multipath_available = mArray.wans[i].multipath_available; // Generate template if(mArray.openmptcprouter.remote_from_lease == true && mArray.wans.length == 1) { @@ -210,6 +211,9 @@ } else if(gw_ping == 'DOWN') { statusMessage += 'Gateway DOWN
' + } else if(multipath_available == 'ERROR') + { + statusMessage += 'Multipath blocked on the connection
' } if(ipv6_discover == 'DETECTED') { diff --git a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf new file mode 100755 index 000000000..4de062d19 --- /dev/null +++ b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf @@ -0,0 +1,10 @@ +#!/bin/sh +uci -q batch <<-EOF >/dev/null + add_list dhcp.dnsmasq.ipset='/multipath-tcp.org/ss_rules_dst_bypass' + commit dhcp +EOF +curl -s -4 -m 5 --interface $1 http://www.multipath-tcp.org +uci -q batch <<-EOF >/dev/null + del_list dhcp.dnsmasq.ipset='/multipath-tcp.org/ss_rules_dst_bypass' + commit dhcp +EOF From 01677ae9f2a9d1afef859dcfc3b0d5358e9e6745 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 19:08:49 +0200 Subject: [PATCH 135/307] Update glorytun UDP --- glorytun-udp/Makefile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/glorytun-udp/Makefile b/glorytun-udp/Makefile index 9373cd93a..d3d95f76a 100644 --- a/glorytun-udp/Makefile +++ b/glorytun-udp/Makefile @@ -8,13 +8,16 @@ include $(TOPDIR)/rules.mk +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/angt/glorytun.git +PKG_SOURCE_VERSION:=c15343f8f6fb275fe9bed56ca251bb801ea5d67b + PKG_NAME:=glorytun-udp PKG_VERSION:=0.0.99-mud -PKG_RELEASE:=2 -PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/angt/glorytun/releases/download/v$(PKG_VERSION) -PKG_BUILD_DIR:=$(BUILD_DIR)/glorytun-$(PKG_VERSION) -PKG_HASH:=5e23afad4592d6af27ffd2cb3c826cf0ea1b5166a05ef1ae5c77fb4e465bb735 +PKG_RELEASE:=17 + +PKG_FIXUP:=autoreconf + include $(INCLUDE_DIR)/package.mk define Package/$(PKG_NAME) From 1674778ce1c9c98a8f4315b75861958d54cdad31 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 19:09:30 +0200 Subject: [PATCH 136/307] Fix --- mptcp/files/etc/init.d/mptcp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 9d7ed0473..22b9eb018 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -93,7 +93,7 @@ interface_multipath_settings() { load_interfaces() { config_get ifname "$1" ifname config_get multipath "$1" multipath "off" - [ "$multipath" != "off" ] && interface=" ${ifname} ${interfaces}" + [ "$multipath" != "off" ] && interfaces=" ${ifname} ${interfaces}" } start_service() { From eb9658bcb190c8aa40e63681732a09a4f0e9f73e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 23:20:43 +0200 Subject: [PATCH 137/307] Fix MPTCP init --- mptcp/files/etc/init.d/mptcp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 22b9eb018..ea4c08601 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -1,6 +1,6 @@ #!/bin/sh /etc/rc.common -START=18 +START=90 USE_PROCD=1 @@ -38,7 +38,7 @@ interface_multipath_settings() { local intf="$2" config_get iface "$config" ifname - [ -z "$iface"] && iface=$(ifstatus "$config" | jsonfilter -e '@["l3_device"]') + [ -z "$iface" ] && iface=$(ifstatus "$config" | jsonfilter -e '@["l3_device"]') count=$(($count+1)) id=$count [ -n "$intf" ] && [ "$iface" != "$intf" ] && return 0 From f6efdc51c930dc214712c304cc6d74b6720c1164 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 23:27:34 +0200 Subject: [PATCH 138/307] add quiet options when jsonfilter is used --- mptcp/files/etc/init.d/mptcp | 6 +++--- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 6 +++--- omr-6in4/files/etc/init.d/omr-6in4 | 4 ++-- omr-quota/files/bin/omr-quota | 4 ++-- omr-tracker/files/bin/omr-tracker | 4 ++-- omr-tracker/files/etc/init.d/omr-tracker | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index ea4c08601..437ab2c6b 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -38,7 +38,7 @@ interface_multipath_settings() { local intf="$2" config_get iface "$config" ifname - [ -z "$iface" ] && iface=$(ifstatus "$config" | jsonfilter -e '@["l3_device"]') + [ -z "$iface" ] && iface=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') count=$(($count+1)) id=$count [ -n "$intf" ] && [ "$iface" != "$intf" ] && return 0 @@ -71,8 +71,8 @@ interface_multipath_settings() { ipaddr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") gateway=$(ip -4 r list dev $iface | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n") [ -z "$gateway" ] && gateway=$(uci -q get "network.$config.gateway") - [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") - [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -e '@.inactive.route[0].nexthop' | tr -d "\n") + [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") + [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") netmask=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f2 | tr -d "\n") network=`ipcalc.sh $ipaddr $netmask | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` fi diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index f2bcc68fa..c2519f867 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -7,17 +7,17 @@ set_route() { PREVINTERFACE=$2 multipath_config=$(uci -q get network.$INTERFACE.multipath || echo "off") interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["l3_device"]') multipath_current_config=$(multipath $interface_if | grep deactivated) if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then #if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then #if [ "$multipath_config" != "off" ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$SETROUTE" != true ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") fi if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -e '@.inactive.route[0].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi if [ "$interface_gw" != "" ]; then _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index c5e4ad41f..74d50eea4 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -16,9 +16,9 @@ reload_service() { elif [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then iface=$(uci -q get openvpn.omr.dev) fi - addr=$(ubus call network.interface.omrvpn status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") + addr=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@["ipv4-address"][0].address' | tr -d "\n") [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") - peer=$(ubus call network.interface.omrvpn status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") + peer=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") [ -z "$peer" ] && [ -n "$iface" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") [ -z "$addr" ] && exit 0 [ -z "$peer" ] && exit 0 diff --git a/omr-quota/files/bin/omr-quota b/omr-quota/files/bin/omr-quota index f112bc564..157ec330a 100755 --- a/omr-quota/files/bin/omr-quota +++ b/omr-quota/files/bin/omr-quota @@ -10,8 +10,8 @@ shift # main loop while true; do - rx=`vnstat -i $OMR_QUOTA_INTERFACE --json | jsonfilter -e '@.interfaces[0].traffic.months[-1].rx' | tr -d "\n"` - tx=`vnstat -i $OMR_QUOTA_INTERFACE --json | jsonfilter -e '@.interfaces[0].traffic.months[-1].tx' | tr -d "\n"` + rx=`vnstat -i $OMR_QUOTA_INTERFACE --json | jsonfilter -q -e '@.interfaces[0].traffic.months[-1].rx' | tr -d "\n"` + tx=`vnstat -i $OMR_QUOTA_INTERFACE --json | jsonfilter -q -e '@.interfaces[0].traffic.months[-1].tx' | tr -d "\n"` tt=$((rx + tx)) [ -n "$OMR_QUOTA_RX" ] && [ "$OMR_QUOTA_RX" -gt 0 ] && [ -n "$rx" ] && [ "$OMR_QUOTA_RX" -ge "$rx" ] && ifdown $OMR_QUOTA_INTERFACE \ || \ diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index acf6364b6..c04d462fc 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -152,10 +152,10 @@ while true; do OMR_TRACKER_DEVICE_GATEWAY=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway") fi if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -e '@.route[0].nexthop' | tr -d "\n") + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") fi if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -e '@.inactive.route[0].nexthop' | tr -d "\n") + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi # execute specific tracker diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index efe216266..05407dda8 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -42,7 +42,7 @@ _launch_tracker() { local ifname ip4table config_get ifname "$1" ifname - [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -e '@["l3_device"]') + [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') config_get multipath "$1" multipath config_get gateway "$1" gateway From eb3f0cc41c8d1b6e6a4ee87135d13a1fac402164 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 23:58:02 +0200 Subject: [PATCH 139/307] Disable check using domains when DNS is down --- .../luasrc/controller/openmptcprouter.lua | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 5fba6340c..1f150bb21 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -309,17 +309,6 @@ function interfaces_status() mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "proxy", "server") or "0.0.0.0" mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr") - -- shadowsocksaddr - local tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or "" - local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") - if tracker_ip ~= "" then - mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 5 http://ip.openmptcprouter.com") - else - mArray.openmptcprouter["ss_addr"] = "" - end - -- wanaddr - mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com") - -- dns mArray.openmptcprouter["dns"] = false local dns_test = sys.exec("dig openmptcprouter.com | grep 'ANSWER: 0'") @@ -327,6 +316,22 @@ function interfaces_status() mArray.openmptcprouter["dns"] = true end + if mArray.openmptcprouter["dns"] == true then + -- shadowsocksaddr + local tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or "" + local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") + if tracker_ip ~= "" then + mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 5 http://ip.openmptcprouter.com") + else + mArray.openmptcprouter["ss_addr"] = "" + end + -- wanaddr + mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com") + else + mArray.openmptcprouter["ss_addr"] = "" + mArray.openmptcprouter["wan_addr"] = "" + end + mArray.openmptcprouter["remote_addr"] = luci.http.getenv("REMOTE_ADDR") or "" mArray.openmptcprouter["remote_from_lease"] = false local leases=tools.dhcp_leases() @@ -452,13 +457,17 @@ function interfaces_status() connectivity = 'ERROR' end - -- Test if multipath can work on the connection - local multipath_available - local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) - if multipath_available_state == "" then - multipath_available = 'OK' + if mArray.openmptcprouter["dns"] == true then + -- Test if multipath can work on the connection + local multipath_available + local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) + if multipath_available_state == "" then + multipath_available = 'OK' + else + multipath_available = 'ERROR' + end else - multipath_available = 'ERROR' + multipath_available = 'NO CHECK' end From e6e28a897ff7930cbce248b4362d160f2c83ffc6 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 19 Jun 2018 08:53:26 +0200 Subject: [PATCH 140/307] Try some optimization settings --- mptcp/files/etc/uci-defaults/mptcp-defaults | 8 +++++++- openmptcprouter/files/etc/sysctl.d/default.conf | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index 07f19b499..6872dcdfc 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -6,7 +6,13 @@ if [ "$(uci -q show network.globals | grep mptcp_path_manager)" = "" ]; then set network.globals.mptcp_scheduler='default' set network.globals.congestion='olia' set network.globals.mptcp_checksum=1 - set network.globals.mptcp_syn_retries=4 + set network.globals.mptcp_syn_retries=30 + commit network + EOF +fi +if [ "$(uci -q get network.globals.mptcp_syn_retries)" = "4" ]; then + uci -q batch <<-EOF + set network.globals.mptcp_syn_retries=30 commit network EOF fi diff --git a/openmptcprouter/files/etc/sysctl.d/default.conf b/openmptcprouter/files/etc/sysctl.d/default.conf index b3ff25ed2..14be04753 100644 --- a/openmptcprouter/files/etc/sysctl.d/default.conf +++ b/openmptcprouter/files/etc/sysctl.d/default.conf @@ -1,2 +1,7 @@ net.ipv4.tcp_ecn=1 net.netfilter.nf_conntrack_helper=1 +net.ipv4.tcp_slow_start_after_idle=30 +net.ipv4.tcp_no_metrics_save=1 +net.ipv4.tcp_fack=1 +net.ipv4.tcp_moderate_rcvbuf=0 +net.ipv4.tcp_retries2=3 From c459722b8b84d4969ef9ce8df4b3a2808876c24e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 19 Jun 2018 10:45:13 +0200 Subject: [PATCH 141/307] Change defaults options for tracker --- omr-tracker/files/etc/config/omr-tracker | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 68a10fc83..3b6decaee 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -8,9 +8,9 @@ config defaults 'defaults' list hosts '1.0.0.1' list hosts '80.67.169.12' list hosts '80.67.169.40' - option timeout '1' - option tries '4' - option interval '4' + option timeout '2' + option tries '5' + option interval '5' option type 'ping' option options '' @@ -22,6 +22,6 @@ config shadowsocks 'shadowsocks' list hosts '23.96.52.53' list hosts '104.40.211.35' list hosts '80.67.169.12' - option timeout '5' + option timeout '10' option tries '4' option interval '10' \ No newline at end of file From 0f524f175b25b504f63dca586a0523b233fe0d14 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 19 Jun 2018 11:05:05 +0200 Subject: [PATCH 142/307] Increase ShadowSocks timeout --- .../files/etc/uci-defaults/1930-omr-shadowsocks | 8 ++++---- shadowsocks-libev/files/shadowsocks-libev.config | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index c78e1015f..10dec8e79 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -10,7 +10,7 @@ if [ "$NBCPU" -gt 2 ]; then set shadowsocks-libev.hi$c.local_address="0.0.0.0" set shadowsocks-libev.hi$c.local_port=1100 set shadowsocks-libev.hi$c.mode=tcp_and_udp - set shadowsocks-libev.hi$c.timeout=200 + set shadowsocks-libev.hi$c.timeout=400 set shadowsocks-libev.hi$c.fast_open=1 set shadowsocks-libev.hi$c.reuse_port=1 set shadowsocks-libev.hi$c.mptcp=1 @@ -21,14 +21,14 @@ if [ "$NBCPU" -gt 2 ]; then fi fi -if [ "$(uci -q get shadowsocks-libev.hi.timeout)" != "200" ]; then +if [ "$(uci -q get shadowsocks-libev.hi.timeout)" != "400" ]; then uci -q batch <<-EOF > /dev/null - set shadowsocks-libev.hi.timeout=200 + set shadowsocks-libev.hi.timeout=400 commit shadowsocks-libev EOF for c in $(seq 2 $NBCPU); do uci -q batch <<-EOF > /dev/null - set shadowsocks-libev.hi$c.timeout=200 + set shadowsocks-libev.hi$c.timeout=400 commit shadowsocks-libev EOF done diff --git a/shadowsocks-libev/files/shadowsocks-libev.config b/shadowsocks-libev/files/shadowsocks-libev.config index 4b81b2cea..490a99125 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.config +++ b/shadowsocks-libev/files/shadowsocks-libev.config @@ -3,7 +3,7 @@ config ss_redir hi option local_address '::' option local_port '1100' option mode 'tcp_and_udp' - option timeout '200' + option timeout '400' option fast_open 1 option verbose 0 option reuse_port 1 @@ -15,7 +15,7 @@ config ss_redir hi2 option local_address '0.0.0.0' option local_port '1100' option mode 'tcp_and_udp' - option timeout '200' + option timeout '400' option fast_open 1 option verbose 0 option reuse_port 1 From dfbba31e1d3a68cab8372187230f64e50678dfcc Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 10:00:46 +0200 Subject: [PATCH 143/307] Little changes in wizard --- .../luasrc/controller/openmptcprouter.lua | 10 +++++++++- .../luasrc/view/openmptcprouter/wizard.htm | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 1f150bb21..b6b6a5a8e 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -23,11 +23,15 @@ function wizard_add() local gostatus = true if add_interface ~= "" then local i = 1 + local multipath_master = false ucic:foreach("network", "interface", function(s) local sectionname = s[".name"] if sectionname:match("^wan(%d+)$") then i = i + 1 end + if uci:get("network",sectionname,"multipath") == "master" then + multipath_master = true + end end) local defif = ucic:get("network","wan1","ifname") or "eth0" ucic:set("network","wan" .. i,"interface") @@ -35,7 +39,11 @@ function wizard_add() ucic:set("network","wan" .. i,"proto","static") ucic:set("network","wan" .. i,"type","macvlan") ucic:set("network","wan" .. i,"ip4table","wan") - ucic:set("network","wan" .. i,"multipath","on") + if multipath_master then + ucic:set("network","wan" .. i,"multipath","on") + else + ucic:set("network","wan" .. i,"multipath","master") + end ucic:set("network","wan" .. i,"defaultroute","0") ucic:save("network") ucic:commit("network") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index cecfe55a2..6b3eabff9 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -21,7 +21,7 @@
help - <%:Server IP will be set for ShadowSocks, Glorytun and MLVPN%> + <%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
From d90d5ea37454f26d312fbc7acc8b9d9f5d11e1eb Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 10:50:17 +0200 Subject: [PATCH 144/307] Add DPI support to OMR-Bypass --- luci-app-omr-bypass/Makefile | 2 +- .../luasrc/controller/omr-bypass.lua | 13 ++-- .../luasrc/view/omr-bypass/bypass.htm | 51 ++++++++++++- .../root/etc/config/omr-bypass | 4 +- .../root/etc/init.d/omr-bypass | 33 ++++++++- .../root/etc/uci-defaults/41_omr-bypass | 11 +++ ndpi-netfilter2/Makefile | 73 +++++++++++++++++++ openmptcprouter-full/Makefile | 4 +- .../files/shadowsocks-libev.init | 2 +- shadowsocks-libev/files/ss-rules | 2 + shadowsocks-libev/files/ss-rules6 | 2 + 11 files changed, 181 insertions(+), 16 deletions(-) create mode 100644 ndpi-netfilter2/Makefile diff --git a/luci-app-omr-bypass/Makefile b/luci-app-omr-bypass/Makefile index 60e9d6f7b..e02498895 100644 --- a/luci-app-omr-bypass/Makefile +++ b/luci-app-omr-bypass/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Interface to bypass domains -LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-ndpi +iptables-mod-extra PKG_LICENSE:=GPLv3 diff --git a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua index 7bb049a4a..95272f27c 100644 --- a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua +++ b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua @@ -24,18 +24,21 @@ function bypass_add() end end end - ucic:delete("omr-bypass","ips","ip") - if table.getn(ip_ipset) > 0 then - for _, i in pairs(ip_ipset) do - ucic:set_list("omr-bypass","ips","ip",ip_ipset) - end + ucic:set_list("omr-bypass","ips","ip",ip_ipset) + + local dpi = luci.http.formvalue("cbid.omr-bypass.dpi") + if (type(dpi) ~= "table") then + dpi = {dpi} end + ucic:set_list("omr-bypass","dpi","proto",dpi) + ucic:save("omr-bypass") ucic:commit("omr-bypass") ucic:set_list("dhcp",ucic:get_first("dhcp","dnsmasq"),"ipset",domains_ipset .. "/ss_rules_dst_bypass") ucic:save("dhcp") ucic:commit("dhcp") --luci.sys.exec("/etc/init.d/dnsmasq restart") + luci.sys.exec("/etc/init.d/omr-bypass restart") luci.http.redirect(luci.dispatcher.build_url("admin/services/omr-bypass")) return end \ No newline at end of file diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index ab8442f04..756720fa1 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -1,11 +1,14 @@ <%+header%> - + <% local uci = require("luci.model.uci").cursor() local hosts = uci:get_list("dhcp", uci:get_first("dhcp","dnsmasq"), "ipset") local ips = uci:get_list("omr-bypass", "ips", "ip") + local dpi = uci:get_list("omr-bypass", "dpi", "proto") + local tmpfile = os.tmpname() + local dpi_available_proto = luci.util.execi("cat /proc/net/xt_ndpi/proto | awk '{print $3}' | sort -u | head -n -1") %> <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> @@ -25,7 +28,12 @@ for hst in string.gmatch(host,"([^/]*)/") do if hst ~= "" then %> -
+ +
+
+ help + <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%> +
<% end end @@ -38,7 +46,12 @@ end if j == 1 then %> -
+ +
+
+ help + <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%> +
<% end %> @@ -46,6 +59,38 @@
+
+
<%:Set protocols you want to bypass.%>
+
+ +
+ <% + local allprt="""" + for prt in dpi_available_proto do + allprt=allprt .. ","" .. prt .. """ + end + %> + +
+<% + local k = 1 + for _ , proto in pairs(dpi) do + k = k+1 +%> +
+<% + end + if k == 1 then +%> +
+<% + end +%> +
+
+
+
+
diff --git a/luci-app-omr-bypass/root/etc/config/omr-bypass b/luci-app-omr-bypass/root/etc/config/omr-bypass index dd5fe7665..867b37e8b 100644 --- a/luci-app-omr-bypass/root/etc/config/omr-bypass +++ b/luci-app-omr-bypass/root/etc/config/omr-bypass @@ -1 +1,3 @@ -config bypass 'ips' \ No newline at end of file +config bypass 'ips' + +config bypass 'dpi' diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index afa4c6b98..2fccdb113 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -1,13 +1,25 @@ #!/bin/sh /etc/rc.common # Copyright (C) 2018 Ycarus (Yannick Chabanois) -START=90 +START=99 STOP=10 USE_PROCD=1 _bypass_ip() { local ip="$1" - ipset add ss_rules_dst_bypass $ip + valid_ip4=$( valid_subnet4 $ip) + valid_ip6=$( valid_subnet6 $ip) + if [ "$valid_ip4" = "ok" ]; then + ipset add ss_rules_dst_bypass $ip + elif [ "$valid_ip6" = "ok" ]; then + ipset add ss_rules6_dst_bypass $ip + fi +} + +_bypass_proto() { + local proto="$1" + ndpi_rules="-A omr-bypass-dpi -m ndpi --$proto -j MARK --set-mark 0x539 + $ndpi_rules" } start_service() { @@ -20,13 +32,28 @@ start_service() { config_list_foreach ips "ip" _bypass_ip ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1 - if [ "$(iptables -t mangle -L | grep 'mark 0x539')" = "" ]; then + + if [ "$(iptables -t mangle -L | grep 'MARK set 0x539')" = "" ]; then iptables-restore --noflush <<-EOF *mangle -A PREROUTING -m set --match-set ss_rules_dst_bypass dst -j MARK --set-mark 0x539 COMMIT EOF fi + + iptables-save --counters | grep -v omr-bypass-dpi | iptables-restore --counters + local ndpi_rules="" + config_list_foreach dpi "proto" _bypass_proto + ndpi_rules=$(echo $ndpi_rules | awk 'NF') + if [ "$ndpi_rules" != "" ]; then + iptables-restore --noflush <<-EOF + *mangle + :omr-bypass-dpi - + -A PREROUTING -m addrtype ! --dst-type LOCAL -j omr-bypass-dpi + $ndpi_rules + COMMIT + EOF + fi } service_triggers() { diff --git a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass index bd9381dc5..cf69f5e6e 100644 --- a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass +++ b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass @@ -7,5 +7,16 @@ uci -q batch <<-EOF >/dev/null commit ucitrack EOF +if [ "$(uci -q get omr-bypass.dpi)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set omr-bypass.dpi=bypass + EOF +fi + +if [ "$(uci -q get ucitrack.@shadowsocks-libev[-1].affects)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set ucitrack.@shadowsocks-libev[-1].affects=omr-bypass + EOF +fi rm -f /tmp/luci-indexcache exit 0 diff --git a/ndpi-netfilter2/Makefile b/ndpi-netfilter2/Makefile new file mode 100644 index 000000000..1fc8cf7c0 --- /dev/null +++ b/ndpi-netfilter2/Makefile @@ -0,0 +1,73 @@ +# +# Based on package from https://github.com/openwrt-develop/ndpi-netfilter/ +# Copyright (C) 2018 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=ndpi-netfilter2 +PKG_VERSION:=5bcfd49 +PKG_RELEASE:=1 +PKG_REV:=5bcfd49 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_URL:=https://github.com/vel21ripn/nDPI.git +PKG_SOURCE_VERSION:=$(PKG_REV) + +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define Package/iptables-mod-ndpi + SUBMENU:=Firewall + SECTION:=net + CATEGORY:=Network + TITLE:=ndpi successor of OpenDPI + URL:=http://www.ntop.org/products/ndpi/ + DEPENDS:=+iptables +iptables-mod-conntrack-extra +kmod-ipt-ndpi + MAINTAINER:=Thomas Heil +endef + +define Package/iptables-mod-ndpi/description + nDPI is a ntop-maintained superset of the popular OpenDPI library +endef + +CONFIGURE_CMD=./autogen.sh +CONFIGURE_ARGS += --with-pic +MAKE_PATH := ndpi-netfilter + +MAKE_FLAGS += \ + KERNEL_DIR="$(LINUX_DIR)" \ + MODULES_DIR="$(TARGET_MODULES_DIR)" \ + NDPI_PATH=$(PKG_BUILD_DIR)/ndpi-netfilter + +define Build/Compile + (cd $(PKG_BUILD_DIR)/src/lib &&\ + gcc -I../../src/include/ -I../../src/lib/third_party/include/ ndpi_network_list_compile.c -o ndpi_network_list_compile &&\ + ./ndpi_network_list_compile -o ndpi_network_list.c.inc ndpi_network_list_std.yaml ndpi_network_list_tor.yaml) + make $(MAKE_FLAGS) -C $(PKG_BUILD_DIR)/ndpi-netfilter +endef + +define Package/iptables-mod-ndpi/install + $(INSTALL_DIR) $(1)/usr/lib/iptables + $(INSTALL_BIN) $(PKG_BUILD_DIR)/ndpi-netfilter/ipt/libxt_ndpi.so $(1)/usr/lib/iptables +endef + +define KernelPackage/ipt-ndpi + SUBMENU:=Netfilter Extensions + TITLE:= nDPI net netfilter module + DEPENDS:=+kmod-nf-conntrack +kmod-nf-conntrack-netlink +kmod-ipt-compat-xtables + KCONFIG:=CONFIG_NF_CONNTRACK_LABELS=y \ + CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y + FILES:= $(PKG_BUILD_DIR)/ndpi-netfilter/src/xt_ndpi.ko + AUTOLOAD:=$(call AutoProbe,xt_ndpi) +endef + +$(eval $(call BuildPackage,iptables-mod-ndpi)) +$(eval $(call KernelPackage,ipt-ndpi)) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 845af485c..26ccb7885 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter-full -PKG_VERSION:=0.8 +PKG_VERSION:=0.9 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk @@ -42,7 +42,7 @@ MY_DEPENDS := \ omr-update \ openvpn-openssl \ kmod-rt2800-usb libimobiledevice \ - rng-tools \ + wpad \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index e03cb4cdf..12faf4a0e 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -9,7 +9,7 @@ USE_PROCD=1 EXTRA_COMMANDS="rules_up rules_down" -START=99 +START=98 ss_confdir=/var/etc/shadowsocks-libev ss_bindir=/usr/bin diff --git a/shadowsocks-libev/files/ss-rules b/shadowsocks-libev/files/ss-rules index 3608f2b26..31d1d6db8 100755 --- a/shadowsocks-libev/files/ss-rules +++ b/shadowsocks-libev/files/ss-rules @@ -186,6 +186,7 @@ ss_rules_iptchains_init_tcp() { -I OUTPUT 1 -p tcp -j ss_rules_local_out -A ss_rules_local_out -m set --match-set ss_rules_dst_bypass dst -j RETURN -A ss_rules_local_out -m set --match-set ss_rules_dst_bypass_ dst -j RETURN + -A ss_rules_local_out -m mark --mark 0x539 -j RETURN -A ss_rules_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" COMMIT EOF @@ -243,6 +244,7 @@ ss_rules_iptchains_init_() { -A ss_rules_pre_src -m set --match-set ss_rules_dst_bypass_ dst -j RETURN -A ss_rules_pre_src -m set --match-set ss_rules_dst_bypass dst -j MARK --set-mark 0x539 -A ss_rules_pre_src -m set --match-set ss_rules_dst_bypass dst -j RETURN + -A ss_rules_pre_src -m mark --mark 0x539 -j RETURN -A ss_rules_dst -m set --match-set ss_rules_dst_bypass dst -j RETURN -A ss_rules_pre_src -p $proto $o_ipt_extra -j ss_rules_src -A ss_rules_src -m set --match-set ss_rules_src_bypass src -j RETURN diff --git a/shadowsocks-libev/files/ss-rules6 b/shadowsocks-libev/files/ss-rules6 index c408276e2..33914950a 100755 --- a/shadowsocks-libev/files/ss-rules6 +++ b/shadowsocks-libev/files/ss-rules6 @@ -170,6 +170,7 @@ ss_rules6_iptchains_init_tcp() { -I OUTPUT 1 -p tcp -j ss_rules6_local_out -A ss_rules6_local_out -m set --match-set ss_rules6_dst_bypass_ dst -j RETURN -A ss_rules6_local_out -m set --match-set ss_rules6_dst_bypass dst -j RETURN + -A ss_rules6_local_out -m mark --mark 0x539 -j RETURN -A ss_rules6_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" COMMIT EOF @@ -228,6 +229,7 @@ ss_rules6_iptchains_init_() { -A ss_rules6_pre_src -m set --match-set ss_rules6_dst_bypass_ dst -j RETURN -A ss_rules6_dst -m set --match-set ss_rules6_dst_bypass dst -j MARK --set-mark 0x539 -A ss_rules6_dst -m set --match-set ss_rules6_dst_bypass dst -j RETURN + -A ss_rules6_dst -m mark --mark 0x539 -j RETURN -A ss_rules6_pre_src -p $proto $o_ipt_extra -j ss_rules6_src -A ss_rules6_src -m set --match-set ss_rules6_src_bypass src -j RETURN -A ss_rules6_src -m set --match-set ss_rules6_src_forward src -j ss_rules6_forward From d8f97eaaf7db685ddf11396ec08e0c440d214da1 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 12:31:35 +0200 Subject: [PATCH 145/307] Fix list of available protocols --- .../luasrc/view/omr-bypass/bypass.htm | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index 756720fa1..4ba75a427 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -10,7 +10,6 @@ local tmpfile = os.tmpname() local dpi_available_proto = luci.util.execi("cat /proc/net/xt_ndpi/proto | awk '{print $3}' | sort -u | head -n -1") %> - <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %>
@@ -64,12 +63,21 @@
- <% +<% local allprt="""" - for prt in dpi_available_proto do - allprt=allprt .. ","" .. prt .. """ + local protos = {} + for l in io.lines("/proc/net/xt_ndpi/proto") do + local a,b,c,d = l:match('(%w+) (%w+)') + if b ~= "2" and not string.match(b,"custom") then + table.insert(protos,b) + end end - %> + table.sort(protos) + for _,b in ipairs(protos) do + allprt=allprt .. ","" .. b .. """ + end +%> +
<% From 8143133e605634e2169fdbf67fae39591ed04e5a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 12:32:48 +0200 Subject: [PATCH 146/307] Reset CircleCI cache --- .circleci/config.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 25221e643..991409445 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,8 +25,8 @@ jobs: - run: name: cache command: | - echo "cache 7 $OMR_TARGET" > /tmp/cache-target - echo "cache 11 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 8 $OMR_TARGET" > /tmp/cache-target + echo "cache 12 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -82,8 +82,8 @@ jobs: - run: name: cache command: | - echo "cache 7 $OMR_TARGET" > /tmp/cache-target - echo "cache 11 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 8 $OMR_TARGET" > /tmp/cache-target + echo "cache 12 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -139,8 +139,8 @@ jobs: - run: name: cache command: | - echo "cache 11 $OMR_TARGET" > /tmp/cache-target - echo "cache 15 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 12 $OMR_TARGET" > /tmp/cache-target + echo "cache 16 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: @@ -196,8 +196,8 @@ jobs: - run: name: cache command: | - echo "cache 11 $OMR_TARGET" > /tmp/cache-target - echo "cache 15 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version + echo "cache 12 $OMR_TARGET" > /tmp/cache-target + echo "cache 16 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version - restore_cache: keys: From 5099a503cf08342cb8a48167498a076646577b92 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 12:45:21 +0200 Subject: [PATCH 147/307] Update README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 4a26144f8..ff6a7e01e 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ Interface to omr-tracker. This is used to check if there is no other IPv6 route announced on the network + ## mlvpn *Source:* [https://github.com/zehome/MLVPN](https://github.com/zehome/MLVPN) @@ -113,3 +114,10 @@ This is used to check if there is no other IPv6 route announced on the network This is an other way to aggregate same latency connections + +## ndpi-filter +*Source:* [https://github.com/vel21ripn/nDPI](https://github.com/vel21ripn/nDPI) + +*Description:* Open Source Deep Packet Inspection Software Toolkit + +This is used to bypass a protocol \ No newline at end of file From 6624c4b40e33d8fc778e2cb934d2e3ed84b2f260 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 17:10:16 +0200 Subject: [PATCH 148/307] Fix ndpi-netfilter package --- ndpi-netfilter2/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ndpi-netfilter2/Makefile b/ndpi-netfilter2/Makefile index 1fc8cf7c0..fa18bafd6 100644 --- a/ndpi-netfilter2/Makefile +++ b/ndpi-netfilter2/Makefile @@ -45,13 +45,15 @@ MAKE_PATH := ndpi-netfilter MAKE_FLAGS += \ KERNEL_DIR="$(LINUX_DIR)" \ MODULES_DIR="$(TARGET_MODULES_DIR)" \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ NDPI_PATH=$(PKG_BUILD_DIR)/ndpi-netfilter define Build/Compile (cd $(PKG_BUILD_DIR)/src/lib &&\ gcc -I../../src/include/ -I../../src/lib/third_party/include/ ndpi_network_list_compile.c -o ndpi_network_list_compile &&\ ./ndpi_network_list_compile -o ndpi_network_list.c.inc ndpi_network_list_std.yaml ndpi_network_list_tor.yaml) - make $(MAKE_FLAGS) -C $(PKG_BUILD_DIR)/ndpi-netfilter + $(MAKE) $(MAKE_FLAGS) -C $(PKG_BUILD_DIR)/ndpi-netfilter endef define Package/iptables-mod-ndpi/install From 6bba3c5b87288f7933ddbe564d3b13ffe4ed780a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 17:10:40 +0200 Subject: [PATCH 149/307] wpad already provided by arch --- openmptcprouter-full/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 26ccb7885..9b34112ef 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -32,7 +32,8 @@ MY_DEPENDS := \ libiwinfo-lua \ ca-bundle ca-certificates libustream-openssl \ luci-mod-admin-full luci-app-firewall luci-app-glorytun luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-base \ - luci-app-nginx-ha luci-app-omr-tracker luci-app-qos \ + luci-app-nginx-ha luci-app-omr-tracker \ + luci-app-sqm \ luci-app-vnstat omr-quota luci-app-omr-quota \ luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass \ omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd iputils-traceroute6 \ @@ -42,7 +43,6 @@ MY_DEPENDS := \ omr-update \ openvpn-openssl \ kmod-rt2800-usb libimobiledevice \ - wpad \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From df23182138c2cd6c893703411a61a0666003b699 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 22 Jun 2018 17:26:18 +0200 Subject: [PATCH 150/307] Fix depends --- luci-app-omr-bypass/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/Makefile b/luci-app-omr-bypass/Makefile index e02498895..fddbae423 100644 --- a/luci-app-omr-bypass/Makefile +++ b/luci-app-omr-bypass/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Interface to bypass domains -LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-ndpi +iptables-mod-extra +LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-ndpi +iptables-mod-extra +kmod-ipt-ndpi +iptables PKG_LICENSE:=GPLv3 From 1e62c383f2c663ced1535a00b6d705aaecd6519a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 24 Jun 2018 21:24:11 +0200 Subject: [PATCH 151/307] Add kmod-mt7601u support --- openmptcprouter-full/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 9b34112ef..5548e6610 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -43,6 +43,7 @@ MY_DEPENDS := \ omr-update \ openvpn-openssl \ kmod-rt2800-usb libimobiledevice \ + kmod-mt7601u \ kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch uqmi adb-enablemodem umbim kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan kmod-usb-net-cdc-mbim OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi From de716dd92d666e1aea907dd9a30ce7dafee28598 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 25 Jun 2018 09:15:59 +0200 Subject: [PATCH 152/307] Check if script already in network affects before adding it --- luci-mod-admin-full/root/etc/uci-defaults/51_macvlan | 9 +++++++-- mptcp/files/etc/uci-defaults/mptcp-defaults | 7 ++++++- omr-quota/files/etc/uci-defaults/omr-quota | 9 +++++++-- omr-tracker/files/etc/uci-defaults/omr-tracker | 9 +++++++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/luci-mod-admin-full/root/etc/uci-defaults/51_macvlan b/luci-mod-admin-full/root/etc/uci-defaults/51_macvlan index e3fdf5b9a..2551fe4e2 100755 --- a/luci-mod-admin-full/root/etc/uci-defaults/51_macvlan +++ b/luci-mod-admin-full/root/etc/uci-defaults/51_macvlan @@ -3,6 +3,11 @@ uci -q batch <<-EOF delete ucitrack.@macvlan[-1] add ucitrack macvlan set ucitrack.@macvlan[-1].init=macvlan - add_list ucitrack.@network[-1].affects=macvlan commit ucitrack -EOF \ No newline at end of file +EOF +if [ "$(uci -q get ucitrack.@network[-1].affects | grep macvlan)" = "" ]; then + uci -q batch <<-EOF + add_list ucitrack.@network[-1].affects=macvlan + commit ucitrack + EOF +fi diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index 6872dcdfc..87f939d83 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -39,7 +39,12 @@ uci -q batch <<-EOF delete ucitrack.@mptcp[-1] add ucitrack mptcp set ucitrack.@mptcp[-1].init=mptcp - add_list ucitrack.@network[-1].affects=mptcp commit ucitrack EOF +if [ "$(uci -q get ucitrack.@network[-1].affects | grep mptcp)" = "" ]; then + uci -q batch <<-EOF + add_list ucitrack.@network[-1].affects=mptcp + commit ucitrack + EOF +fi exit 0 \ No newline at end of file diff --git a/omr-quota/files/etc/uci-defaults/omr-quota b/omr-quota/files/etc/uci-defaults/omr-quota index 0f09b4695..b9ef06a1d 100755 --- a/omr-quota/files/etc/uci-defaults/omr-quota +++ b/omr-quota/files/etc/uci-defaults/omr-quota @@ -3,6 +3,11 @@ uci -q batch <<-EOF delete ucitrack.@omr-quota[-1] add ucitrack omr-quota set ucitrack.@omr-quota[-1].init="omr-quota" - add_list ucitrack.@network[-1].affects="omr-quota" commit ucitrack -EOF \ No newline at end of file +EOF +if [ "$(uci -q get ucitrack.@network[-1].affects | grep omr-quota)" = "" ]; then + uci -q batch <<-EOF + add_list ucitrack.@network[-1].affects="omr-quota" + commit ucitrack + EOF +fi diff --git a/omr-tracker/files/etc/uci-defaults/omr-tracker b/omr-tracker/files/etc/uci-defaults/omr-tracker index e8d5e9fd3..065fb6b53 100755 --- a/omr-tracker/files/etc/uci-defaults/omr-tracker +++ b/omr-tracker/files/etc/uci-defaults/omr-tracker @@ -3,6 +3,11 @@ uci -q batch <<-EOF delete ucitrack.@omr-tracker[-1] add ucitrack omr-tracker set ucitrack.@omr-tracker[-1].init="omr-tracker" - add_list ucitrack.@network[-1].affects="omr-tracker" commit ucitrack -EOF \ No newline at end of file +EOF +if [ "$(uci -q ucitrack.@network[-1].affects | grep omr-tracker)" = "" ]; then + uci -q batch <<-EOF + add_list ucitrack.@network[-1].affects="omr-tracker" + commit ucitrack + EOF +fi \ No newline at end of file From a69fd4543328195896f04688b42a2b1efcbaf2c8 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 25 Jun 2018 09:35:51 +0200 Subject: [PATCH 153/307] Update french translations --- luci-app-omr-bypass/po/fr/omr-bypass.po | 16 +++++++- .../po/templates/omr-bypass.pot | 11 +++++ .../po/fr/openmptcprouter.po | 41 ++++++++++++++++--- .../po/templates/openmptcprouter.pot | 22 ++++++++-- 4 files changed, 81 insertions(+), 9 deletions(-) diff --git a/luci-app-omr-bypass/po/fr/omr-bypass.po b/luci-app-omr-bypass/po/fr/omr-bypass.po index 188c4b691..b77dc3192 100644 --- a/luci-app-omr-bypass/po/fr/omr-bypass.po +++ b/luci-app-omr-bypass/po/fr/omr-bypass.po @@ -21,8 +21,22 @@ msgstr "Domaine, IP ou réseau" msgid "OMR-Bypass" msgstr "" +msgid "Protocol" +msgstr "Protocole" + msgid "Set domains name, ips or networks you want to bypass." -msgstr "Configurer les domaines, adresses IPs ou réseaux que vous voulez contourner." +msgstr "" +"Configurer les domaines, adresses IPs ou réseaux que vous voulez contourner." + +msgid "Set protocols you want to bypass." +msgstr "Configurer les protocoles que vous voulez contourner." + +msgid "" +"You need to use OpenMPTCProuter as DNS server when you want to bypass a " +"domain" +msgstr "" +"Vous devez utiliser OpenMPTCProuter en tant que serveur DNS quand vous " +"souhaitez contourner un domaine" #~ msgid "Domains" #~ msgstr "Domaines" diff --git a/luci-app-omr-bypass/po/templates/omr-bypass.pot b/luci-app-omr-bypass/po/templates/omr-bypass.pot index 1937c7ac0..f561277e7 100644 --- a/luci-app-omr-bypass/po/templates/omr-bypass.pot +++ b/luci-app-omr-bypass/po/templates/omr-bypass.pot @@ -10,5 +10,16 @@ msgstr "" msgid "OMR-Bypass" msgstr "" +msgid "Protocol" +msgstr "" + msgid "Set domains name, ips or networks you want to bypass." msgstr "" + +msgid "Set protocols you want to bypass." +msgstr "" + +msgid "" +"You need to use OpenMPTCProuter as DNS server when you want to bypass a " +"domain" +msgstr "" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 5ef639f54..3c75e0050 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -18,14 +18,17 @@ msgstr "Ajouter une interface" msgid "Advanced Settings" msgstr "Configuration avancé" +msgid "Default VPN" +msgstr "VPN par défaut" + msgid "Delete" msgstr "Supprimer" msgid "Disable IPv6" msgstr "Désactiver IPv6" -msgid "Glorytun is used for UDP and ICMP" -msgstr "Glorytun est utilisé pour UDP et ICMP" +msgid "Glorytun TCP is used by default for UDP and ICMP" +msgstr "Glorytun est utilisé par défaut pour UDP et ICMP" msgid "Glorytun key" msgstr "Clef Glorytun" @@ -45,7 +48,7 @@ msgstr "Masque de sous-réseau IPv6" msgid "Interfaces settings" msgstr "Paramètres des interfaces" -msgid "MLVPN can replace Glorytun with connection with same latency" +msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" "MLVPN peut remplacer Glorytun pour les connexions avec la même latence" @@ -67,6 +70,9 @@ msgstr "Paramètres réseaux" msgid "OpenMPTCProuter" msgstr "" +msgid "OpenVPN key" +msgstr "Clef OpenVPN" + msgid "Put the values given by OpenMPTCProuter VPS script." msgstr "Mettez les valeurs données par le script OpenMPTCProuter VPS." @@ -76,8 +82,9 @@ msgstr "" msgid "Server IP" msgstr "IP du serveur" -msgid "Server IP will be set for ShadowSocks, Glorytun and MLVPN" -msgstr "L'IP du serveur sera configuré pour ShadowSocks, Glorytun et MLVPN" +msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" +msgstr "" +"L'IP du serveur sera configuré pour ShadowSocks, Glorytun, OpenVPN et MLVPN" msgid "Server settings" msgstr "Paramètres du serveur" @@ -88,6 +95,13 @@ msgstr "Mettez une IP dans le même réseau que le modem" msgid "Set here IP of the modem" msgstr "Mettez ici l'IP du modem" +msgid "" +"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " +"all traffic if ShadowSocks is disabled." +msgstr "" +"Configure le VPN utilisé par défaut pour UDP et ICMP quand ShadowSocks est " +"activé, pour tout le trafic quand ShadowSocks est désactivé." + msgid "Settings Wizard" msgstr "Assistant de configuration" @@ -110,3 +124,20 @@ msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "Vous devez désactiver DHCP sur vos modems et configurer leurs IP dans des " "réseaux différents." + +msgid "" +"You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script " +"to use OpenVPN TCP" +msgstr "" +"Vous devez ajouter le fichier contenant la clef OpenVPN générée par le " +"script OpenMPTCProuter VPS pour utiliser OpenVPN TCP" + +#~ msgid "Glorytun is used for UDP and ICMP" +#~ msgstr "Glorytun est utilisé pour UDP et ICMP" + +#~ msgid "MLVPN can replace Glorytun with connection with same latency" +#~ msgstr "" +#~ "MLVPN peut remplacer Glorytun pour les connexions avec la même latence" + +#~ msgid "Server IP will be set for ShadowSocks, Glorytun and MLVPN" +#~ msgstr "L'IP du serveur sera configuré pour ShadowSocks, Glorytun et MLVPN" diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index e20dcb225..ff206e434 100644 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -7,13 +7,16 @@ msgstr "" msgid "Advanced Settings" msgstr "" +msgid "Default VPN" +msgstr "" + msgid "Delete" msgstr "" msgid "Disable IPv6" msgstr "" -msgid "Glorytun is used for UDP and ICMP" +msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "" msgid "Glorytun key" @@ -34,7 +37,7 @@ msgstr "" msgid "Interfaces settings" msgstr "" -msgid "MLVPN can replace Glorytun with connection with same latency" +msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" msgid "MLVPN password" @@ -55,6 +58,9 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "" +msgid "OpenVPN key" +msgstr "" + msgid "Put the values given by OpenMPTCProuter VPS script." msgstr "" @@ -64,7 +70,7 @@ msgstr "" msgid "Server IP" msgstr "" -msgid "Server IP will be set for ShadowSocks, Glorytun and MLVPN" +msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" msgstr "" msgid "Server settings" @@ -76,6 +82,11 @@ msgstr "" msgid "Set here IP of the modem" msgstr "" +msgid "" +"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " +"all traffic if ShadowSocks is disabled." +msgstr "" + msgid "Settings Wizard" msgstr "" @@ -96,3 +107,8 @@ msgstr "" msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" + +msgid "" +"You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script " +"to use OpenVPN TCP" +msgstr "" From 6c936379ca0260879014b17c596f4ae7022761fb Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 25 Jun 2018 10:06:46 +0200 Subject: [PATCH 154/307] Back to qos app --- openmptcprouter-full/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 5548e6610..70254092c 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -33,7 +33,7 @@ MY_DEPENDS := \ ca-bundle ca-certificates libustream-openssl \ luci-mod-admin-full luci-app-firewall luci-app-glorytun luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-base \ luci-app-nginx-ha luci-app-omr-tracker \ - luci-app-sqm \ + luci-app-qos \ luci-app-vnstat omr-quota luci-app-omr-quota \ luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass \ omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd iputils-traceroute6 \ From 195f763059783e13351967a025bb2cac70a78bf5 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 25 Jun 2018 15:32:03 +0200 Subject: [PATCH 155/307] Fix --- openmptcprouter/files/etc/uci-defaults/1960-omr-qos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1960-omr-qos b/openmptcprouter/files/etc/uci-defaults/1960-omr-qos index f7d9bbb2f..a93fc17fd 100755 --- a/openmptcprouter/files/etc/uci-defaults/1960-omr-qos +++ b/openmptcprouter/files/etc/uci-defaults/1960-omr-qos @@ -21,7 +21,7 @@ if [ "$(uci -q get qos.wan1)" = "" ]; then add qos classify set qos.@classify[-1].target='Express' set qos.@classify[-1].portrange='27000-27050' - set qos.@classify[1].proto='udp' + set qos.@classify[-1].proto='udp' set qos.@classify[-1].comments='Steam' commit qos EOF From ed43c60b5a3cfb0baf29e70d8ab6dcff885a6d6d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 25 Jun 2018 15:46:39 +0200 Subject: [PATCH 156/307] Remove qos-scripts, updated upstream --- qos-scripts/Makefile | 53 -- qos-scripts/files/etc/config/qos | 68 --- qos-scripts/files/etc/hotplug.d/iface/10-qos | 2 - qos-scripts/files/etc/init.d/qos | 28 - qos-scripts/files/usr/bin/qos-start | 4 - qos-scripts/files/usr/bin/qos-stat | 67 --- qos-scripts/files/usr/bin/qos-stop | 6 - qos-scripts/files/usr/lib/qos/generate.sh | 537 ------------------- qos-scripts/files/usr/lib/qos/tcrules.awk | 106 ---- 9 files changed, 871 deletions(-) delete mode 100644 qos-scripts/Makefile delete mode 100644 qos-scripts/files/etc/config/qos delete mode 100755 qos-scripts/files/etc/hotplug.d/iface/10-qos delete mode 100755 qos-scripts/files/etc/init.d/qos delete mode 100755 qos-scripts/files/usr/bin/qos-start delete mode 100755 qos-scripts/files/usr/bin/qos-stat delete mode 100755 qos-scripts/files/usr/bin/qos-stop delete mode 100755 qos-scripts/files/usr/lib/qos/generate.sh delete mode 100644 qos-scripts/files/usr/lib/qos/tcrules.awk diff --git a/qos-scripts/Makefile b/qos-scripts/Makefile deleted file mode 100644 index 3b14f13f7..000000000 --- a/qos-scripts/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (C) 2006-2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=qos-scripts -PKG_VERSION:=1.3.0 -PKG_RELEASE:=2 -PKG_LICENSE:=GPL-2.0 - -PKG_MAINTAINER:=Felix Fietkau - -PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/qos-scripts - SECTION:=utils - CATEGORY:=Base system - DEPENDS:=+tc +kmod-sched-core +kmod-sched-connmark +kmod-ifb +iptables +iptables-mod-ipopt +iptables-mod-conntrack-extra - TITLE:=QoS scripts - PKGARCH:=all -endef - -define Package/qos-scripts/description - A set of scripts that abstract QoS configuration into a simple - configuration file supporting stanzas that specify any number of QoS - entries. -endef - -define Package/qos-scripts/conffiles -/etc/config/qos -endef - -define Build/Prepare -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/qos-scripts/install - $(INSTALL_DIR) $(1) - $(CP) ./files/* $(1)/ -endef - -$(eval $(call BuildPackage,qos-scripts)) diff --git a/qos-scripts/files/etc/config/qos b/qos-scripts/files/etc/config/qos deleted file mode 100644 index 44e988a67..000000000 --- a/qos-scripts/files/etc/config/qos +++ /dev/null @@ -1,68 +0,0 @@ -# QoS configuration for OpenWrt - -# INTERFACES: -config interface wan - option classgroup "Default" - option enabled 0 - option upload 128 - option download 1024 - -# RULES: -config classify - option target "Priority" - option ports "22,53" - option comment "ssh, dns" -config classify - option target "Normal" - option proto "tcp" - option ports "20,21,25,80,110,443,993,995" - option comment "ftp, smtp, http(s), imap" -config classify - option target "Express" - option ports "5190" - option comment "AOL, iChat, ICQ" -config default - option target "Express" - option proto "udp" - option pktsize "-500" -config reclassify - option target "Priority" - option proto "icmp" -config default - option target "Bulk" - option portrange "1024-65535" - - -# Don't change the stuff below unless you -# really know what it means :) - -config classgroup "Default" - option classes "Priority Express Normal Bulk" - option default "Normal" - - -config class "Priority" - option packetsize 400 - option avgrate 10 - option priority 20 -config class "Priority_down" - option packetsize 1000 - option avgrate 10 - - -config class "Express" - option packetsize 1000 - option avgrate 50 - option priority 10 - -config class "Normal" - option packetsize 1500 - option packetdelay 100 - option avgrate 10 - option priority 5 -config class "Normal_down" - option avgrate 20 - -config class "Bulk" - option avgrate 1 - option packetdelay 200 diff --git a/qos-scripts/files/etc/hotplug.d/iface/10-qos b/qos-scripts/files/etc/hotplug.d/iface/10-qos deleted file mode 100755 index 0ced29ac7..000000000 --- a/qos-scripts/files/etc/hotplug.d/iface/10-qos +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -[ "$ACTION" = ifup ] && /etc/init.d/qos enabled && /usr/lib/qos/generate.sh interface "$INTERFACE" | sh diff --git a/qos-scripts/files/etc/init.d/qos b/qos-scripts/files/etc/init.d/qos deleted file mode 100755 index 712d906f0..000000000 --- a/qos-scripts/files/etc/init.d/qos +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright (C) 2006 OpenWrt.org - -START=50 -USE_PROCD=1 - -validate_qos_section() -{ - uci_validate_section qos interface "${1}" \ - 'enabled:bool' \ - 'upload:uinteger' \ - 'download:uinteger' -} - -service_triggers() -{ - procd_add_reload_trigger "qos" - procd_add_validation validate_qos_section - qos-start -} - -start_service() { - qos-start -} - -reload_service() { - qos-start -} diff --git a/qos-scripts/files/usr/bin/qos-start b/qos-scripts/files/usr/bin/qos-start deleted file mode 100755 index 261ffb42b..000000000 --- a/qos-scripts/files/usr/bin/qos-start +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -qos-stop -/usr/lib/qos/generate.sh all | sh - diff --git a/qos-scripts/files/usr/bin/qos-stat b/qos-scripts/files/usr/bin/qos-stat deleted file mode 100755 index cbbf8e8de..000000000 --- a/qos-scripts/files/usr/bin/qos-stat +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# Copyright (C) 2011 OpenWrt.org - -. /lib/functions.sh - -include /lib/network - -get_ifname() { - local interface="$1" - local cfgt - - scan_interfaces - config_get cfgt "$interface" TYPE - [ "$cfgt" = "interface" ] && config_get "$interface" ifname -} - -config_cb() { - config_get TYPE "$CONFIG_SECTION" TYPE - [ "interface" = "$TYPE" ] && { - config_get device "$CONFIG_SECTION" ifname - [ -z "$device" ] && device="$(get_ifname ${CONFIG_SECTION})" - config_set "$CONFIG_SECTION" device "$device" - } -} - -config_load qos - -print_comments() { - echo '' - echo '# Interface: '"$1" - echo '# Direction: '"$2" - echo '# Stats: '"$3" - echo '' -} - -get_device() { - ( config_load network; scan_interfaces; config_get "$1" ifname ) -} - -interface_stats() { - local interface="$1" - local device - - device="$(get_device "$interface")" - [ -z "$device" ] && config_get device "$interface" device - config_get_bool enabled "$interface" enabled 1 - [ -z "$device" -o 1 -ne "$enabled" ] && { - return 1 - } - config_get_bool halfduplex "$interface" halfduplex 0 - - if [ 1 -ne "$halfduplex" ]; then - unset halfduplex - print_comments "$interface" "Egress" "Start" - tc -s class show dev "$device" - print_comments "$interface" "Egress" "End" - id="root" - else - id="" - fi - - print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start" - tc -s class show dev "$(tc filter show dev $device $id | grep mirred | sed -e 's,.*\(ifb.*\)).*,\1,')" - print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End" -} - -[ -z "$1" ] && config_foreach interface_stats interface || interface_stats "$1" diff --git a/qos-scripts/files/usr/bin/qos-stop b/qos-scripts/files/usr/bin/qos-stop deleted file mode 100755 index 7f654d858..000000000 --- a/qos-scripts/files/usr/bin/qos-stop +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -for iface in $(tc qdisc show | grep -E '(hfsc|ingress)' | awk '{print $5}'); do - tc qdisc del dev "$iface" ingress 2>&- >&- - tc qdisc del dev "$iface" root 2>&- >&- -done -/usr/lib/qos/generate.sh firewall stop | sh diff --git a/qos-scripts/files/usr/lib/qos/generate.sh b/qos-scripts/files/usr/lib/qos/generate.sh deleted file mode 100755 index f1b7413ad..000000000 --- a/qos-scripts/files/usr/lib/qos/generate.sh +++ /dev/null @@ -1,537 +0,0 @@ -#!/bin/sh -[ -e /lib/functions.sh ] && . /lib/functions.sh || . ./functions.sh -[ -x /sbin/modprobe ] && { - insmod="modprobe" - rmmod="$insmod -r" -} || { - insmod="insmod" - rmmod="rmmod" -} - -add_insmod() { - eval "export isset=\${insmod_$1}" - case "$isset" in - 1) ;; - *) { - [ "$2" ] && append INSMOD "$rmmod $1 >&- 2>&-" "$N" - append INSMOD "$insmod $* >&- 2>&-" "$N"; export insmod_$1=1 - };; - esac -} - -[ -e /etc/config/network ] && { - # only try to parse network config on openwrt - - find_ifname() {( - reset_cb - include /lib/network - scan_interfaces - config_get "$1" ifname - )} -} || { - find_ifname() { - echo "Interface not found." - exit 1 - } -} - -parse_matching_rule() { - local var="$1" - local section="$2" - local options="$3" - local prefix="$4" - local suffix="$5" - local proto="$6" - local mport="" - local ports="" - - append "$var" "$prefix" "$N" - for option in $options; do - case "$option" in - proto) config_get value "$section" proto; proto="${proto:-$value}";; - esac - done - config_get type "$section" TYPE - case "$type" in - classify) unset pkt; append "$var" "-m mark --mark 0/0x0f";; - default) pkt=1; append "$var" "-m mark --mark 0/0xf0";; - reclassify) pkt=1;; - esac - append "$var" "${proto:+-p $proto}" - for option in $options; do - config_get value "$section" "$option" - [ -z "$value" ] && continue - case "$pkt:$option" in - *:srchost) - append "$var" "-s $value" - ;; - *:dsthost) - append "$var" "-d $value" - ;; - *:ports|*:srcports|*:dstports) - value="$(echo "$value" | sed -e 's,-,:,g')" - lproto=${lproto:-tcp} - case "$proto" in - ""|tcp|udp) append "$var" "-m ${proto:-tcp -p tcp} -m multiport";; - *) unset "$var"; return 0;; - esac - case "$option" in - ports) - config_set "$section" srcports "" - config_set "$section" dstports "" - config_set "$section" portrange "" - append "$var" "--ports $value" - ;; - srcports) - config_set "$section" ports "" - config_set "$section" dstports "" - config_set "$section" portrange "" - append "$var" "--sports $value" - ;; - dstports) - config_set "$section" ports "" - config_set "$section" srcports "" - config_set "$section" portrange "" - append "$var" "--dports $value" - ;; - esac - ports=1 - ;; - *:portrange) - config_set "$section" ports "" - config_set "$section" srcports "" - config_set "$section" dstports "" - value="$(echo "$value" | sed -e 's,-,:,g')" - case "$proto" in - ""|tcp|udp) append "$var" "-m ${proto:-tcp -p tcp} --sport $value --dport $value";; - *) unset "$var"; return 0;; - esac - ports=1 - ;; - *:connbytes) - value="$(echo "$value" | sed -e 's,-,:,g')" - add_insmod xt_connbytes - append "$var" "-m connbytes --connbytes $value --connbytes-dir both --connbytes-mode bytes" - ;; - *:comment) - add_insmod xt_comment - append "$var" "-m comment --comment '$value'" - ;; - *:tos) - add_insmod xt_dscp - case "$value" in - !*) append "$var" "-m tos ! --tos $value";; - *) append "$var" "-m tos --tos $value" - esac - ;; - *:dscp) - add_insmod xt_dscp - dscp_option="--dscp" - [ -z "${value%%[EBCA]*}" ] && dscp_option="--dscp-class" - case "$value" in - !*) append "$var" "-m dscp ! $dscp_option $value";; - *) append "$var" "-m dscp $dscp_option $value" - esac - ;; - *:direction) - value="$(echo "$value" | sed -e 's,-,:,g')" - if [ "$value" = "out" ]; then - append "$var" "-o $device" - elif [ "$value" = "in" ]; then - append "$var" "-i $device" - fi - ;; - *:srciface) - append "$var" "-i $value" - ;; - 1:pktsize) - value="$(echo "$value" | sed -e 's,-,:,g')" - add_insmod xt_length - append "$var" "-m length --length $value" - ;; - 1:limit) - add_insmod xt_limit - append "$var" "-m limit --limit $value" - ;; - 1:tcpflags) - case "$proto" in - tcp) append "$var" "-m tcp --tcp-flags ALL $value";; - *) unset $var; return 0;; - esac - ;; - 1:mark) - config_get class "${value##!}" classnr - [ -z "$class" ] && continue; - case "$value" in - !*) append "$var" "-m mark ! --mark $class/0x0f";; - *) append "$var" "-m mark --mark $class/0x0f";; - esac - ;; - 1:TOS) - add_insmod xt_DSCP - config_get TOS "$rule" 'TOS' - suffix="-j TOS --set-tos "${TOS:-"Normal-Service"} - ;; - 1:DSCP) - add_insmod xt_DSCP - config_get DSCP "$rule" 'DSCP' - [ -z "${DSCP%%[EBCA]*}" ] && set_value="--set-dscp-class $DSCP" \ - || set_value="--set-dscp $DSCP" - suffix="-j DSCP $set_value" - ;; - esac - done - append "$var" "$suffix" - case "$ports:$proto" in - 1:) parse_matching_rule "$var" "$section" "$options" "$prefix" "$suffix" "udp";; - esac -} - -config_cb() { - option_cb() { - return 0 - } - - # Section start - case "$1" in - interface) - config_set "$2" "classgroup" "Default" - config_set "$2" "upload" "128" - ;; - classify|default|reclassify) - option_cb() { - append options "$1" - } - ;; - esac - - # Section end - config_get TYPE "$CONFIG_SECTION" TYPE - case "$TYPE" in - interface) - config_get_bool enabled "$CONFIG_SECTION" enabled 1 - [ 1 -eq "$enabled" ] || return 0 - config_get classgroup "$CONFIG_SECTION" classgroup - config_set "$CONFIG_SECTION" ifbdev "$C" - C=$(($C+1)) - append INTERFACES "$CONFIG_SECTION" - config_set "$classgroup" enabled 1 - config_get device "$CONFIG_SECTION" device - [ -z "$device" ] && { - device="$(find_ifname ${CONFIG_SECTION})" - config_set "$CONFIG_SECTION" device "$device" - } - ;; - classgroup) append CG "$CONFIG_SECTION";; - classify|default|reclassify) - case "$TYPE" in - classify) var="ctrules";; - *) var="rules";; - esac - config_get target "$CONFIG_SECTION" target - config_set "$CONFIG_SECTION" options "$options" - append "$var" "$CONFIG_SECTION" - unset options - ;; - esac -} - - -enum_classes() { - local c="0" - config_get classes "$1" classes - config_get default "$1" default - for class in $classes; do - c="$(($c + 1))" - config_set "${class}" classnr $c - case "$class" in - $default) class_default=$c;; - esac - done - class_default="${class_default:-$c}" -} - -cls_var() { - local varname="$1" - local class="$2" - local name="$3" - local type="$4" - local default="$5" - local tmp tmp1 tmp2 - config_get tmp1 "$class" "$name" - config_get tmp2 "${class}_${type}" "$name" - tmp="${tmp2:-$tmp1}" - tmp="${tmp:-$tmp2}" - export ${varname}="${tmp:-$default}" -} - -tcrules() { - _dir=/usr/lib/qos - [ -e $_dir/tcrules.awk ] || _dir=. - echo "$cstr" | awk \ - -v device="$dev" \ - -v linespeed="$rate" \ - -v direction="$dir" \ - -f $_dir/tcrules.awk -} - -start_interface() { - local iface="$1" - local num_ifb="$2" - config_get device "$iface" device - config_get_bool enabled "$iface" enabled 1 - [ -z "$device" -o 1 -ne "$enabled" ] && { - return 1 - } - config_get upload "$iface" upload - config_get_bool halfduplex "$iface" halfduplex - config_get download "$iface" download - config_get classgroup "$iface" classgroup - config_get_bool overhead "$iface" overhead 0 - - download="${download:-${halfduplex:+$upload}}" - enum_classes "$classgroup" - for dir in ${halfduplex:-up} ${download:+down}; do - case "$dir" in - up) - [ "$overhead" = 1 ] && upload=$(($upload * 98 / 100 - (15 * 128 / $upload))) - dev="$device" - rate="$upload" - dl_mode="" - prefix="cls" - ;; - down) - [ "$(ls -d /proc/sys/net/ipv4/conf/ifb* 2>&- | wc -l)" -ne "$num_ifb" ] && add_insmod ifb numifbs="$num_ifb" - config_get ifbdev "$iface" ifbdev - [ "$overhead" = 1 ] && download=$(($download * 98 / 100 - (80 * 1024 / $download))) - dev="ifb$ifbdev" - rate="$download" - dl_mode=1 - prefix="d_cls" - ;; - *) continue;; - esac - cstr= - for class in $classes; do - cls_var pktsize "$class" packetsize $dir 1500 - cls_var pktdelay "$class" packetdelay $dir 0 - cls_var maxrate "$class" limitrate $dir 100 - cls_var prio "$class" priority $dir 1 - cls_var avgrate "$class" avgrate $dir 0 - cls_var qdisc "$class" qdisc $dir "" - cls_var filter "$class" filter $dir "" - config_get classnr "$class" classnr - append cstr "$classnr:$prio:$avgrate:$pktsize:$pktdelay:$maxrate:$qdisc:$filter" "$N" - done - append ${prefix}q "$(tcrules)" "$N" - export dev_${dir}="ifconfig $dev up >&- 2>&- -tc qdisc del dev $dev root >&- 2>&- -tc qdisc add dev $dev root handle 1: hfsc default ${class_default}0 -tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${rate}kbit" - done - [ -n "$download" ] && { - add_insmod cls_u32 - add_insmod em_u32 - add_insmod act_connmark - add_insmod act_mirred - add_insmod sch_ingress - } - if [ -n "$halfduplex" ]; then - export dev_up="tc qdisc del dev $device root >&- 2>&- -tc qdisc add dev $device root handle 1: hfsc -tc filter add dev $device parent 1: prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb$ifbdev" - elif [ -n "$download" ]; then - append dev_${dir} "tc qdisc del dev $device ingress >&- 2>&- -tc qdisc add dev $device ingress -tc filter add dev $device parent ffff: prio 1 u32 match u32 0 0 flowid 1:1 action connmark action mirred egress redirect dev ifb$ifbdev" "$N" - fi - add_insmod cls_fw - add_insmod sch_hfsc - - cat < 0)) linespeed = 128 - FS=":" - n = 0 -} - -($1 != "") { - n++ - class[n] = $1 - prio[n] = $2 - avgrate[n] = ($3 * linespeed / 100) - pktsize[n] = $4 - delay[n] = $5 - maxrate[n] = ($6 * linespeed / 100) - qdisc[n] = $7 - filter[n] = $8 -} - -END { - allocated = 0 - maxdelay = 0 - - for (i = 1; i <= n; i++) { - # set defaults - if (!(pktsize[i] > 0)) pktsize[i] = 1500 - if (!(prio[i] > 0)) prio[i] = 1 - - allocated += avgrate[i] - sum_prio += prio[i] - if ((avgrate[i] > 0) && !(delay[i] > 0)) { - sum_rtprio += prio[i] - } - } - - # allocation of m1 in rt classes: - # sum(d * m1) must not exceed dmax * (linespeed - allocated) - dmax = 0 - for (i = 1; i <= n; i++) { - if (avgrate[i] > 0) { - rtm2[i] = avgrate[i] - if (delay[i] > 0) { - d[i] = delay[i] - } else { - d[i] = 2 * pktsize[i] * 1000 / (linespeed * 1024) - if (d[i] > dmax) dmax = d[i] - } - } - } - - ds_avail = dmax * (linespeed - allocated) - for (i = 1; i <= n; i++) { - lsm1[i] = 0 - rtm1[i] = 0 - lsm2[i] = linespeed * prio[i] / sum_prio - if ((avgrate[i] > 0) && (d[i] > 0)) { - if (!(delay[i] > 0)) { - ds = ds_avail * prio[i] / sum_rtprio - ds_avail -= ds - rtm1[i] = rtm2[i] + ds/d[i] - } - lsm1[i] = rtm1[i] - } - else { - d[i] = 0 - } - } - - # main qdisc - for (i = 1; i <= n; i++) { - printf "tc class add dev "device" parent 1:1 classid 1:"class[i]"0 hfsc" - if (rtm1[i] > 0) { - printf " rt m1 " int(rtm1[i]) "kbit d " int(d[i] * 1000) "us m2 " int(rtm2[i])"kbit" - } - printf " ls m1 " int(lsm1[i]) "kbit d " int(d[i] * 1000) "us m2 " int(lsm2[i]) "kbit" - print " ul rate " int(maxrate[i]) "kbit" - } - - # leaf qdisc - avpkt = 1200 - for (i = 1; i <= n; i++) { - print "tc qdisc add dev "device" parent 1:"class[i]"0 handle "class[i]"00: fq_codel limit 800 quantum 300 noecn" - } - - # filter rule - for (i = 1; i <= n; i++) { - filter_cmd = "tc filter add dev "device" parent 1: prio %d handle %s fw flowid 1:%d0\n"; - if (direction == "up") { - filter_1 = sprintf("0x%x0/0xf0", class[i]) - filter_2 = sprintf("0x0%x/0x0f", class[i]) - } else { - filter_1 = sprintf("0x0%x/0x0f", class[i]) - filter_2 = sprintf("0x%x0/0xf0", class[i]) - } - - printf filter_cmd, class[i] * 2, filter_1, class[i] - printf filter_cmd, class[i] * 2 + 1, filter_2, class[i] - - filterc=1 - if (filter[i] != "") { - print " tc filter add dev "device" parent "class[i]"00: handle "filterc"0 "filter[i] - filterc=filterc+1 - } - } -} - From 6c716b8886c2e2be4cee76e590e1e55c5bae8d1c Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 12:10:00 +0200 Subject: [PATCH 157/307] Update to latest Nginx version --- nginx/Config.in | 19 ++++ nginx/Makefile | 99 +++++++++++++++++-- .../files-luci-support/60_nginx-luci-support | 26 +++++ .../70_nginx-luci-support-ssl | 46 +++++++++ nginx/files-luci-support/luci_nginx.conf | 55 +++++++++++ nginx/files-luci-support/luci_nginx_ssl.conf | 70 +++++++++++++ nginx/files-luci-support/luci_uwsgi.conf | 14 +++ .../100-no_by_lua_block.patch | 36 +++---- nginx/patches/101-feature_test_fix.patch | 18 ++-- nginx/patches/102-sizeof_test_fix.patch | 2 +- 10 files changed, 349 insertions(+), 36 deletions(-) create mode 100644 nginx/files-luci-support/60_nginx-luci-support create mode 100644 nginx/files-luci-support/70_nginx-luci-support-ssl create mode 100644 nginx/files-luci-support/luci_nginx.conf create mode 100644 nginx/files-luci-support/luci_nginx_ssl.conf create mode 100644 nginx/files-luci-support/luci_uwsgi.conf diff --git a/nginx/Config.in b/nginx/Config.in index 4cec04026..ebe0e567d 100644 --- a/nginx/Config.in +++ b/nginx/Config.in @@ -201,5 +201,24 @@ config NGINX_HTTP_SECURE_LINK bool prompt "Enable HTTP secure link module" default n + +config NGINX_HEADERS_MORE + bool + prompt "Enable Headers_more module" + help + Set and clear input and output headers...more than "add"! + default y + +config NGINX_HTTP_BROTLI + bool + prompt "Enable Brotli compression module" + help + Add support for brotli compression module. + default n + +config NGINX_STREAM + bool + prompt "Enable stream module" + default y endmenu diff --git a/nginx/Makefile b/nginx/Makefile index 9c7206c89..6330d0030 100644 --- a/nginx/Makefile +++ b/nginx/Makefile @@ -8,12 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=nginx -PKG_VERSION:=1.12.2 -PKG_RELEASE:=1 +PKG_VERSION:=1.14.0 +PKG_RELEASE:=2 PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://nginx.org/download/ -PKG_HASH:=305f379da1d5fb5aefa79e45c829852ca6983c7cd2a79328f8e084a324cf0416 +PKG_HASH:=5d15becbf69aba1fe33f8d416d97edd95ea8919ea9ac519eff9bafebb6022cb5 + PKG_MAINTAINER:=Thomas Heil PKG_LICENSE:=2-clause BSD-like license @@ -57,10 +58,13 @@ PKG_CONFIG_DEPENDS := \ CONFIG_NGINX_HTTP_CACHE \ CONFIG_NGINX_HTTP_V2 \ CONFIG_NGINX_PCRE \ + CONFIG_NGINX_STREAM \ CONFIG_NGINX_NAXSI \ CONFIG_NGINX_LUA \ CONFIG_NGINX_HTTP_REAL_IP \ - CONFIG_NGINX_HTTP_SECURE_LINK + CONFIG_NGINX_HTTP_SECURE_LINK \ + CONFIG_NGINX_HTTP_BROTLI \ + CONFIG_NGINX_HEADERS_MORE include $(INCLUDE_DIR)/package.mk @@ -71,7 +75,6 @@ define Package/nginx TITLE:=Nginx web server URL:=http://nginx.org/ DEPENDS:=+NGINX_PCRE:libpcre +(NGINX_SSL||NGINX_HTTP_CACHE||NGINX_HTTP_AUTH_BASIC):libopenssl +NGINX_HTTP_GZIP:zlib +NGINX_LUA:liblua +libpthread - MENU:=1 endef define Package/nginx/description @@ -208,8 +211,43 @@ endif ifeq ($(CONFIG_NGINX_HTTP_SECURE_LINK),y) ADDITIONAL_MODULES += --with-http_secure_link_module endif +ifeq ($(CONFIG_NGINX_HEADERS_MORE),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-headers-more +endif +ifeq ($(CONFIG_NGINX_HTTP_BROTLI),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-brotli +endif +ifeq ($(CONFIG_NGINX_STREAM),y) + ADDITIONAL_MODULES += --with-stream +endif -TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK -DNGX_HAVE_GCC_ATOMIC +define Package/nginx-mod-luci + SECTION:=net + CATEGORY:=Network + SUBMENU:=Web Servers/Proxies + TITLE:=Support file for Nginx + URL:=http://nginx.org/ + DEPENDS:=nginx +uwsgi-cgi +uwsgi-cgi-luci-support +endef + +define Package/nginx-mod-luci/description + Support file for LuCI in nginx (include custom nginx configuration, autostart script for uwsgi) +endef + +define Package/nginx-mod-luci-ssl + SECTION:=net + CATEGORY:=Network + SUBMENU:=Web Servers/Proxies + TITLE:=Support file for Nginx (SSL) + URL:=http://nginx.org/ + DEPENDS:=nginx +nginx-mod-luci +endef + +define Package/nginx-mod-luci-ssl/description + Support file for LuCI in nginx (include custom nginx configuration, autostart script for uwsgi, redirect from http to https) +endef + +TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK TARGET_LDFLAGS += -Wl,--gc-sections define Build/Configure @@ -234,6 +272,21 @@ define Build/Configure ) endef +define Package/nginx-mod-luci/install + $(INSTALL_DIR) $(1)/etc/nginx + $(INSTALL_BIN) ./files-luci-support/luci_uwsgi.conf $(1)/etc/nginx/luci_uwsgi.conf + $(INSTALL_BIN) ./files-luci-support/luci_nginx.conf $(1)/etc/nginx/luci_nginx.conf + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files-luci-support/60_nginx-luci-support $(1)/etc/uci-defaults/60_nginx-luci-support +endef + +define Package/nginx-mod-luci-ssl/install + $(INSTALL_DIR) $(1)/etc/nginx + $(INSTALL_BIN) ./files-luci-support/luci_nginx_ssl.conf $(1)/etc/nginx/luci_nginx_ssl.conf + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files-luci-support/70_nginx-luci-support-ssl $(1)/etc/uci-defaults/70_nginx-luci-support-ssl +endef + define Package/nginx/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/nginx $(1)/usr/sbin/ @@ -254,10 +307,38 @@ define Build/Prepare $(call Build/Prepare/Default) $(if $(CONFIG_NGINX_NAXSI),$(call Prepare/nginx-naxsi)) $(if $(CONFIG_NGINX_LUA),$(call Prepare/lua-nginx)) + $(if $(CONFIG_NGINX_HTTP_BROTLI),$(call Prepare/nginx-brotli)) + $(if $(CONFIG_NGINX_HEADERS_MORE),$(call Prepare/nginx-headers-more)) +endef + +define Download/nginx-headers-more + VERSION:=a9f7c7e86cc7441d04e2f11f01c2e3a9c4b0301d + SUBDIR:=nginx-headers-more + FILE:=headers-more-nginx-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/openresty/headers-more-nginx-module.git + PROTO:=git +endef + +define Prepare/nginx-headers-more + $(eval $(call Download,nginx-headers-more)) + gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) +endef + +define Download/nginx-brotli + VERSION:=37ab9b2933a0b756ba3447000b7f31d432ed8228 + SUBDIR:=nginx-brotli + FILE:=ngx-brotli-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/eustas/ngx_brotli.git + PROTO:=git +endef + +define Prepare/nginx-brotli + $(eval $(call Download,nginx-brotli)) + gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) endef define Download/nginx-naxsi - VERSION:=cf73f9c8664127252c2a4958d2e169516d3845a1 + VERSION:=fc4740f9734cabc1ce4c9d4cddc4b472eab1cc4b SUBDIR:=nginx-naxsi FILE:=nginx-naxsi-module-$(PKG_VERSION)-$$(VERSION).tar.gz URL:=https://github.com/nbs-system/naxsi.git @@ -270,7 +351,7 @@ define Prepare/nginx-naxsi endef define Download/lua-nginx - VERSION:=cdd2ae921f67bf396c743406493127be496e57ce + VERSION:=55743aeba3075b34a250380b32bad6366eae6c30 SUBDIR:=lua-nginx FILE:=lua-nginx-module-$(PKG_VERSION)-$$(VERSION).tar.gz URL:=https://github.com/openresty/lua-nginx-module.git @@ -284,3 +365,5 @@ define Prepare/lua-nginx endef $(eval $(call BuildPackage,nginx)) +$(eval $(call BuildPackage,nginx-mod-luci)) +$(eval $(call BuildPackage,nginx-mod-luci-ssl)) diff --git a/nginx/files-luci-support/60_nginx-luci-support b/nginx/files-luci-support/60_nginx-luci-support new file mode 100644 index 000000000..38a8aa885 --- /dev/null +++ b/nginx/files-luci-support/60_nginx-luci-support @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ -f "/etc/nginx/luci_nginx.conf" ] && [ -f "/etc/nginx/nginx.conf" ]; then + if [ ! "$(cat '/etc/nginx/nginx.conf' | grep -q 'luci_uwsgi.conf')" ]; then + mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_old + mv /etc/nginx/luci_nginx.conf /etc/nginx/nginx.conf + core_number=$(grep -c ^processor /proc/cpuinfo) + sed -i "3s/.*/worker_processes "$core_number";/" /etc/nginx/nginx.conf + if [ -n "$(pgrep uhttpd)" ]; then + /etc/init.d/uhttpd stop + /etc/init.d/uhttpd disable + fi + if [ -n "$(pgrep nginx)" ]; then + /etc/init.d/nginx restart + else + /etc/init.d/nginx start + fi + if [ -n "$(pgrep uwsgi)" ]; then + /etc/init.d/uwsgi restart + else + /etc/init.d/uwsgi start + fi + fi +fi + +exit 0 diff --git a/nginx/files-luci-support/70_nginx-luci-support-ssl b/nginx/files-luci-support/70_nginx-luci-support-ssl new file mode 100644 index 000000000..1cc1a85fc --- /dev/null +++ b/nginx/files-luci-support/70_nginx-luci-support-ssl @@ -0,0 +1,46 @@ +#!/bin/sh + + +if [ -f "/etc/nginx/luci_nginx_ssl.conf" ] && [ -f "/etc/nginx/nginx.conf" ]; then + if [ ! "$(cat '/etc/nginx/nginx.conf' | grep -q 'return 301 https://$host$request_uri;')" ]; then + if [ -f "/etc/nginx/nginx.conf_old" ]; then + rm /etc/nginx/nginx.conf + else + mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_old + fi + mv /etc/nginx/luci_nginx_ssl.conf /etc/nginx/nginx.conf + core_number=$(grep -c ^processor /proc/cpuinfo) + sed -i "3s/.*/worker_processes "$core_number";/" /etc/nginx/nginx.conf + if [ -n "$(pgrep nginx)" ]; then + /etc/init.d/nginx restart + else + /etc/init.d/nginx start + fi + fi +fi + + +if [ ! -f "/etc/nginx/nginx.key" ]; then + + NGINX_KEY=/etc/nginx/nginx.key + NGINX_CER=/etc/nginx/nginx.cer + OPENSSL_BIN=/usr/bin/openssl + PX5G_BIN=/usr/sbin/px5g + + # Prefer px5g for certificate generation (existence evaluated last) + GENKEY_CMD="" + UNIQUEID=$(dd if=/dev/urandom bs=1 count=4 | hexdump -e '1/1 "%02x"') + [ -x "$OPENSSL_BIN" ] && GENKEY_CMD="$OPENSSL_BIN req -x509 -nodes" + [ -x "$PX5G_BIN" ] && GENKEY_CMD="$PX5G_BIN selfsigned" + [ -n "$GENKEY_CMD" ] && { + $GENKEY_CMD \ + -days 730 -newkey rsa:2048 -keyout "${NGINX_KEY}.new" -out "${NGINX_CER}.new" \ + -subj /C="ZZ"/ST="Somewhere"/L="Unknown"/O="OpenWrt""$UNIQUEID"/CN="OpenWrt" + sync + mv "${NGINX_KEY}.new" "${NGINX_KEY}" + mv "${NGINX_CER}.new" "${NGINX_CER}" + } +fi + + +exit 0 diff --git a/nginx/files-luci-support/luci_nginx.conf b/nginx/files-luci-support/luci_nginx.conf new file mode 100644 index 000000000..78f916b04 --- /dev/null +++ b/nginx/files-luci-support/luci_nginx.conf @@ -0,0 +1,55 @@ + +user root; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 0; + + client_body_buffer_size 10K; + client_header_buffer_size 1k; + client_max_body_size 1G; + large_client_header_buffers 2 1k; + + gzip on; + gzip_http_version 1.1; + gzip_vary on; + gzip_comp_level 1; + gzip_proxied any; + + root /www; + + server { + listen 80 default_server; + listen [::]:80 default_server; + server_name localhost; + + location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { + expires 365d; + } + + location / { + index index.html; + include luci_uwsgi.conf; + } + + location /luci-static { + + } + } +} \ No newline at end of file diff --git a/nginx/files-luci-support/luci_nginx_ssl.conf b/nginx/files-luci-support/luci_nginx_ssl.conf new file mode 100644 index 000000000..4647fecbf --- /dev/null +++ b/nginx/files-luci-support/luci_nginx_ssl.conf @@ -0,0 +1,70 @@ + +user root; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 0; + + client_body_buffer_size 10K; + client_header_buffer_size 1k; + client_max_body_size 1G; + large_client_header_buffers 2 1k; + + gzip on; + gzip_http_version 1.1; + gzip_vary on; + gzip_comp_level 1; + gzip_proxied any; + + root /www; + + server { + listen 80 default_server; + listen [::]:80 default_server; + server_name _; + return 301 https://$host$request_uri; + } + + server { + listen 443 ssl default_server; + listen [::]:443 ssl default_server; + server_name localhost; + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:DHE+AESGCM:DHE:!RSA!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!CAMELLIA:!SEED"; + ssl_session_tickets off; + + ssl_certificate /etc/nginx/nginx.cer; + ssl_certificate_key /etc/nginx/nginx.key; + + location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { + expires 365d; + } + + location / { + index index.html; + include luci_uwsgi.conf; + } + + location /luci-static { + + } + } +} \ No newline at end of file diff --git a/nginx/files-luci-support/luci_uwsgi.conf b/nginx/files-luci-support/luci_uwsgi.conf new file mode 100644 index 000000000..eec66f4ad --- /dev/null +++ b/nginx/files-luci-support/luci_uwsgi.conf @@ -0,0 +1,14 @@ +uwsgi_param QUERY_STRING $query_string; +uwsgi_param REQUEST_METHOD $request_method; +uwsgi_param CONTENT_TYPE $content_type; +uwsgi_param CONTENT_LENGTH $content_length if_not_empty; +uwsgi_param REQUEST_URI $request_uri; +uwsgi_param PATH_INFO $document_uri; +uwsgi_param SERVER_PROTOCOL $server_protocol; +uwsgi_param REMOTE_ADDR $remote_addr; +uwsgi_param REMOTE_PORT $remote_port; +uwsgi_param SERVER_ADDR $server_addr; +uwsgi_param SERVER_PORT $server_port; +uwsgi_param SERVER_NAME $server_name; +uwsgi_modifier1 9; +uwsgi_pass unix:////var/run/uwsgi.sock; \ No newline at end of file diff --git a/nginx/patches-lua-nginx/100-no_by_lua_block.patch b/nginx/patches-lua-nginx/100-no_by_lua_block.patch index fef983fa7..968e12d58 100644 --- a/nginx/patches-lua-nginx/100-no_by_lua_block.patch +++ b/nginx/patches-lua-nginx/100-no_by_lua_block.patch @@ -1,6 +1,6 @@ --- a/lua-nginx/src/ngx_http_lua_module.c +++ b/lua-nginx/src/ngx_http_lua_module.c -@@ -157,14 +157,14 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -165,14 +165,14 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_lua_loc_conf_t, log_socket_errors), NULL }, @@ -17,7 +17,7 @@ { ngx_string("init_by_lua"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, ngx_http_lua_init_by_lua, -@@ -178,14 +178,14 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -186,14 +186,14 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_MAIN_CONF_OFFSET, 0, (void *) ngx_http_lua_init_by_file }, @@ -34,7 +34,7 @@ { ngx_string("init_worker_by_lua"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, ngx_http_lua_init_worker_by_lua, -@@ -201,6 +201,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -209,6 +209,7 @@ static ngx_command_t ngx_http_lua_cmds[] (void *) ngx_http_lua_init_worker_by_file }, #if defined(NDK) && NDK @@ -42,7 +42,7 @@ /* set_by_lua $res { inline Lua code } [$arg1 [$arg2 [...]]] */ { ngx_string("set_by_lua_block"), NGX_HTTP_SRV_CONF|NGX_HTTP_SIF_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -209,7 +210,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -217,7 +218,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_filter_set_by_lua_inline }, @@ -51,7 +51,7 @@ /* set_by_lua $res [$arg1 [$arg2 [...]]] */ { ngx_string("set_by_lua"), NGX_HTTP_SRV_CONF|NGX_HTTP_SIF_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -237,7 +238,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -245,7 +246,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_rewrite_handler_inline }, @@ -60,7 +60,7 @@ /* rewrite_by_lua_block { } */ { ngx_string("rewrite_by_lua_block"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -246,7 +247,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -254,7 +255,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_rewrite_handler_inline }, @@ -69,7 +69,7 @@ /* access_by_lua "" */ { ngx_string("access_by_lua"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -255,7 +256,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -263,7 +264,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_access_handler_inline }, @@ -78,7 +78,7 @@ /* access_by_lua_block { } */ { ngx_string("access_by_lua_block"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -264,7 +265,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -272,7 +273,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_access_handler_inline }, @@ -87,7 +87,7 @@ /* content_by_lua "" */ { ngx_string("content_by_lua"), NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1, -@@ -272,7 +273,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -280,7 +281,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_content_handler_inline }, @@ -96,7 +96,7 @@ /* content_by_lua_block { } */ { ngx_string("content_by_lua_block"), NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS, -@@ -280,7 +281,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -288,7 +289,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_content_handler_inline }, @@ -105,7 +105,7 @@ /* log_by_lua */ { ngx_string("log_by_lua"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -289,7 +290,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -297,7 +298,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_log_handler_inline }, @@ -114,7 +114,7 @@ /* log_by_lua_block { } */ { ngx_string("log_by_lua_block"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -298,7 +299,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -306,7 +307,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_log_handler_inline }, @@ -123,7 +123,7 @@ { ngx_string("rewrite_by_lua_file"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF |NGX_CONF_TAKE1, -@@ -353,7 +354,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -361,7 +362,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_header_filter_inline }, @@ -132,7 +132,7 @@ /* header_filter_by_lua_block { } */ { ngx_string("header_filter_by_lua_block"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -362,7 +363,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -370,7 +371,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_header_filter_inline }, @@ -141,7 +141,7 @@ { ngx_string("header_filter_by_lua_file"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF |NGX_CONF_TAKE1, -@@ -378,7 +379,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -386,7 +387,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_body_filter_inline }, @@ -150,7 +150,7 @@ /* body_filter_by_lua_block { } */ { ngx_string("body_filter_by_lua_block"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF -@@ -387,7 +388,7 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -395,7 +396,7 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_body_filter_inline }, @@ -159,7 +159,7 @@ { ngx_string("body_filter_by_lua_file"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF |NGX_CONF_TAKE1, -@@ -395,14 +396,14 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -403,14 +404,14 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, 0, (void *) ngx_http_lua_body_filter_file }, @@ -176,7 +176,7 @@ { ngx_string("balancer_by_lua_file"), NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1, ngx_http_lua_balancer_by_lua, -@@ -509,14 +510,14 @@ static ngx_command_t ngx_http_lua_cmds[] +@@ -517,14 +518,14 @@ static ngx_command_t ngx_http_lua_cmds[] NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_lua_loc_conf_t, ssl_ciphers), NULL }, diff --git a/nginx/patches/101-feature_test_fix.patch b/nginx/patches/101-feature_test_fix.patch index 2c692bc79..930e7da98 100644 --- a/nginx/patches/101-feature_test_fix.patch +++ b/nginx/patches/101-feature_test_fix.patch @@ -11,7 +11,7 @@ ngx_feature_libs= --- a/auto/cc/conf +++ b/auto/cc/conf -@@ -200,7 +200,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then +@@ -204,7 +204,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then else ngx_feature="C99 variadic macros" ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS" @@ -20,7 +20,7 @@ ngx_feature_incs="#include #define var(dummy, ...) sprintf(__VA_ARGS__)" ngx_feature_path= -@@ -214,7 +214,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then +@@ -218,7 +218,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then ngx_feature="gcc variadic macros" ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" @@ -40,7 +40,7 @@ ngx_feature_incs="#include " ngx_feature_path= ngx_feature_libs= -@@ -93,7 +93,7 @@ ngx_feature_test="int fd; struct stat sb +@@ -110,7 +110,7 @@ ngx_feature_test="int fd; struct stat sb CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE" ngx_feature="sendfile()" ngx_feature_name="NGX_HAVE_SENDFILE" @@ -49,7 +49,7 @@ ngx_feature_incs="#include #include " ngx_feature_path= -@@ -114,7 +114,7 @@ fi +@@ -131,7 +131,7 @@ fi CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64" ngx_feature="sendfile64()" ngx_feature_name="NGX_HAVE_SENDFILE64" @@ -58,7 +58,7 @@ ngx_feature_incs="#include #include " ngx_feature_path= -@@ -132,7 +132,7 @@ ngx_include="sys/prctl.h"; . auto/includ +@@ -149,7 +149,7 @@ ngx_include="sys/prctl.h"; . auto/includ ngx_feature="prctl(PR_SET_DUMPABLE)" ngx_feature_name="NGX_HAVE_PR_SET_DUMPABLE" @@ -69,7 +69,7 @@ ngx_feature_libs= --- a/auto/unix +++ b/auto/unix -@@ -735,7 +735,7 @@ ngx_feature_test="void *p; p = memalign( +@@ -840,7 +840,7 @@ ngx_feature_test="void *p; p = memalign( ngx_feature="mmap(MAP_ANON|MAP_SHARED)" ngx_feature_name="NGX_HAVE_MAP_ANON" @@ -78,7 +78,7 @@ ngx_feature_incs="#include " ngx_feature_path= ngx_feature_libs= -@@ -748,7 +748,7 @@ ngx_feature_test="void *p; +@@ -853,7 +853,7 @@ ngx_feature_test="void *p; ngx_feature='mmap("/dev/zero", MAP_SHARED)' ngx_feature_name="NGX_HAVE_MAP_DEVZERO" @@ -87,7 +87,7 @@ ngx_feature_incs="#include #include #include " -@@ -763,7 +763,7 @@ ngx_feature_test='void *p; int fd; +@@ -868,7 +868,7 @@ ngx_feature_test='void *p; int fd; ngx_feature="System V shared memory" ngx_feature_name="NGX_HAVE_SYSVSHM" @@ -96,7 +96,7 @@ ngx_feature_incs="#include #include " ngx_feature_path= -@@ -777,7 +777,7 @@ ngx_feature_test="int id; +@@ -882,7 +882,7 @@ ngx_feature_test="int id; ngx_feature="POSIX semaphores" ngx_feature_name="NGX_HAVE_POSIX_SEM" diff --git a/nginx/patches/102-sizeof_test_fix.patch b/nginx/patches/102-sizeof_test_fix.patch index 8a0e88200..7d2430eab 100644 --- a/nginx/patches/102-sizeof_test_fix.patch +++ b/nginx/patches/102-sizeof_test_fix.patch @@ -16,7 +16,7 @@ return 0; } -@@ -40,7 +45,7 @@ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>& +@@ -40,7 +46,7 @@ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>& if [ -x $NGX_AUTOTEST ]; then From 3a08cc3074b8b5e42782893f2196851c4a3c2a85 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 12:10:31 +0200 Subject: [PATCH 158/307] Update nginx-ha luci interface to support multiple stream --- luci-app-nginx-ha/Makefile | 1 + .../luasrc/model/cbi/nginx-ha.lua | 2 +- luci-app-nginx-ha/root/etc/config/nginx-ha | 10 ++++- luci-app-nginx-ha/root/etc/init.d/nginx-ha | 44 ++++++++++++------- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/luci-app-nginx-ha/Makefile b/luci-app-nginx-ha/Makefile index c9e835813..267d00238 100644 --- a/luci-app-nginx-ha/Makefile +++ b/luci-app-nginx-ha/Makefile @@ -9,6 +9,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Support for nginx load balancing LUCI_DEPENDS:=+nginx +KCONFIG:=CONFIG_NGINX_STREAM PKG_LICENSE:=MIT diff --git a/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua b/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua index 7f4a43d22..dab6918f4 100644 --- a/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua +++ b/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua @@ -7,7 +7,7 @@ else end s = m:section(TypedSection, "general", translate("General Setting")) -s.anonymous = true +s.addremove = true o = s:option(Flag, "enable", translate("Enable")) o.rmempty = false diff --git a/luci-app-nginx-ha/root/etc/config/nginx-ha b/luci-app-nginx-ha/root/etc/config/nginx-ha index b6cfa9761..8c3e60d92 100644 --- a/luci-app-nginx-ha/root/etc/config/nginx-ha +++ b/luci-app-nginx-ha/root/etc/config/nginx-ha @@ -1,8 +1,16 @@ -config general 'general' +config general 'ShadowSocks' option enable '0' option retries '1' option timeout '1000' option listen '0.0.0.0:65101' option startup_delay '5' list upstreams '1.2.3.4:65101 weight=1 max_fails=3 fail_timeout=30s' + +config general 'VPN' + option enable '0' + option retries '1' + option timeout '1000' + option listen '0.0.0.0:65001' + option startup_delay '5' + list upstreams '1.2.3.4:65001 weight=1 max_fails=3 fail_timeout=30s' diff --git a/luci-app-nginx-ha/root/etc/init.d/nginx-ha b/luci-app-nginx-ha/root/etc/init.d/nginx-ha index fee654f12..ce9805bb8 100755 --- a/luci-app-nginx-ha/root/etc/init.d/nginx-ha +++ b/luci-app-nginx-ha/root/etc/init.d/nginx-ha @@ -49,6 +49,31 @@ start_instance() { [ "$enable" = 1 ] || return 1 + stream="${stream} + upstream ${1} { + zone dynamic 64k; + $(config_list_foreach "${1}" "upstreams" genline_srv) + } + + server { + listen ${listen:-0.0.0.0:6666} udp; + proxy_pass ${1}; + } + server { + listen ${listen:-0.0.0.0:6666}; + proxy_pass ${1}; + } + " +} + +start_service() { + local stream="" + config_load nginx-ha + config_foreach start_instance general + + [ -z "$stream" ] && return + + mkdir -p /var/log/nginx mkdir -p /var/etc cat <<-EOF > /var/etc/$PROG_NAME.cfg user nobody nogroup; @@ -62,19 +87,7 @@ start_instance() { } stream { - upstream allservers { - zone dynamic 64k; - $(config_list_foreach "${1}" "upstreams" genline_srv) - } - - server { - listen ${listen:-0.0.0.0:6666} udp; - proxy_pass allservers; - } - server { - listen ${listen:-0.0.0.0:6666}; - proxy_pass allservers; - } + ${stream} } EOF @@ -83,11 +96,8 @@ start_instance() { procd_set_param file /var/etc/$PROG_NAME.cfg procd_set_param respawn procd_close_instance -} -start_service() { - config_load nginx-ha - config_foreach start_instance general + } reload_service() { From 5f882b75ae849ebce9dda2a31c7e91d2d2c9c0d7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 13:34:26 +0200 Subject: [PATCH 159/307] NGX_HAVE_GCC_ATOMIC really needed --- nginx/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nginx/Makefile b/nginx/Makefile index 6330d0030..b3baa1d07 100644 --- a/nginx/Makefile +++ b/nginx/Makefile @@ -247,7 +247,7 @@ define Package/nginx-mod-luci-ssl/description Support file for LuCI in nginx (include custom nginx configuration, autostart script for uwsgi, redirect from http to https) endef -TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK +TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK -DNGX_HAVE_GCC_ATOMIC TARGET_LDFLAGS += -Wl,--gc-sections define Build/Configure From b82d337a68a31435d8856538d13c197212febf32 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 14:41:35 +0200 Subject: [PATCH 160/307] Remove startup delay and rename config of Nginx-ha --- luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua | 15 +++------------ luci-app-nginx-ha/root/etc/config/nginx-ha | 6 ++---- luci-app-nginx-ha/root/etc/init.d/nginx-ha | 11 ++--------- 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua b/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua index dab6918f4..375545274 100644 --- a/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua +++ b/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua @@ -6,29 +6,20 @@ else m = Map("nginx-ha", translate("Nginx High Availability"), "%s - %s" %{translate("Nginx High Availability"), translate("NOT RUNNING")}) end -s = m:section(TypedSection, "general", translate("General Setting")) +s = m:section(TypedSection, "nginxha", translate("Settings")) s.addremove = true o = s:option(Flag, "enable", translate("Enable")) o.rmempty = false -o = s:option(Value, "startup_delay", translate("Startup Delay")) -o:value(0, translate("Not enabled")) -for _, v in ipairs({5, 10, 15, 25, 40}) do - o:value(v, translate("%u seconds") %{v}) -end -o.datatype = "uinteger" -o.default = 0 -o.rmempty = false - o = s:option(Value, "listen", translate("Listen Address:Port")) o.placeholder = "0.0.0.0:6666" o.default = "0.0.0.0:6666" o.rmempty = false o = s:option(Value, "timeout", translate("Timeout Connect (ms)")) -o.placeholder = "666" -o.default = "666" +o.placeholder = "1000" +o.default = "1000" o.datatype = "range(33, 10000)" o.rmempty = false diff --git a/luci-app-nginx-ha/root/etc/config/nginx-ha b/luci-app-nginx-ha/root/etc/config/nginx-ha index 8c3e60d92..66d3b08c3 100644 --- a/luci-app-nginx-ha/root/etc/config/nginx-ha +++ b/luci-app-nginx-ha/root/etc/config/nginx-ha @@ -1,16 +1,14 @@ -config general 'ShadowSocks' +config nginxha 'ShadowSocks' option enable '0' option retries '1' option timeout '1000' option listen '0.0.0.0:65101' - option startup_delay '5' list upstreams '1.2.3.4:65101 weight=1 max_fails=3 fail_timeout=30s' -config general 'VPN' +config nginxha 'VPN' option enable '0' option retries '1' option timeout '1000' option listen '0.0.0.0:65001' - option startup_delay '5' list upstreams '1.2.3.4:65001 weight=1 max_fails=3 fail_timeout=30s' diff --git a/luci-app-nginx-ha/root/etc/init.d/nginx-ha b/luci-app-nginx-ha/root/etc/init.d/nginx-ha index ce9805bb8..84e21bd5e 100755 --- a/luci-app-nginx-ha/root/etc/init.d/nginx-ha +++ b/luci-app-nginx-ha/root/etc/init.d/nginx-ha @@ -20,11 +20,10 @@ _err() { } validate_section() { - uci_validate_section nginx-ha general "${1}" \ + uci_validate_section nginx-ha nginxha "${1}" \ 'enable:bool:0' \ 'retries:uinteger:3' \ 'timeout:uinteger:4000' \ - 'startup_delay:uinteger:5' \ 'listen:string' \ 'upstreams:list(string)' } @@ -33,12 +32,6 @@ genline_srv(){ echo " server $1;" } -boot() { - local delay=$(uci -q get $NAME.general.startup_delay) - (sleep ${delay:-0} && start >/dev/null 2>&1) & - return 0 -} - start_instance() { local enable retries timeout startup_delay listen upstreams @@ -69,7 +62,7 @@ start_instance() { start_service() { local stream="" config_load nginx-ha - config_foreach start_instance general + config_foreach start_instance nginxha [ -z "$stream" ] && return From e7d3130a6f10939e4d79b09aa0d51ad69f2ffdd6 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 18:07:13 +0200 Subject: [PATCH 161/307] Small OMR-Bypass interface change --- .../luasrc/view/omr-bypass/bypass.htm | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index 4ba75a427..ef99342bc 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -1,6 +1,6 @@ <%+header%> - + <% local uci = require("luci.model.uci").cursor() @@ -29,10 +29,6 @@ %>
-
- help - <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%> -
<% end end @@ -41,20 +37,25 @@ j = j+1 %>
+
+
+ help + <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%> +
<% end if j == 1 then %>
-
- help - <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%> -
+
+
+ help + <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%> +
<% end %> -
From 43e0d630636249bc98aa2718de708c5b5e55e544 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 18:07:36 +0200 Subject: [PATCH 162/307] Add support of VPS failover to wizard --- .../luasrc/controller/openmptcprouter.lua | 64 +++++++++++++++++-- .../luasrc/view/openmptcprouter/wizard.htm | 39 ++++++++--- .../root/etc/uci-defaults/openmptcprouter | 11 +++- 3 files changed, 99 insertions(+), 15 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b6b6a5a8e..06089cb28 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -77,16 +77,73 @@ function wizard_add() end ucic:save("network") ucic:commit("network") - - local server_ip = luci.http.formvalue("server_ip") + -- Get VPN set by default + local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" + local vpn_port + if default_vpn:match("^glorytun.*") then + vpn_port = 65001 + elseif default_vpn == "mlvpn" then + vpn_port = 65201 + elseif default_vpn == "openvpn" then + vpn_port = 65301 + end + + -- Get all servers ips + local server_ip = luci.http.formvalue("server_ip") -- We have an IP, so set it everywhere if server_ip ~= "" then + -- Check if we have more than one IP, in this case use Nginx HA + if (type(server_ip) == "table") then + local ss_servers = {} + local vpn_servers = {} + local k = 0 + for _, ip in pairs(server_ip) do + if k == 0 then + table.insert(ss_servers,ip .. ":65101 max_fails=3 fail_timeout=30s") + table.insert(vpn_servers,ip .. ":65001 max_fails=3 fail_timeout=30s") + ucic:set("qos","serverin","srchost",ip) + ucic:set("qos","serverout","dsthost",ip) + ucic:save("qos") + ucic:commit("qos") + else + table.insert(ss_servers,ip .. ":65101 backup") + table.insert(vpn_servers,ip .. ":65001 backup") + end + k = k + 1 + end + ucic:set("nginx-ha","ShadowSocks","enable","1") + ucic:set("nginx-ha","VPN","enable","1") + ucic:set("nginx-ha","ShadowSocks","upstreams",ss_servers) + ucic:set("nginx-ha","VPN","upstreams",vpn_servers) + ucic:save("nginx-ha") + ucic:commit("nginx-ha") + server_ip = "127.0.0.1" + else + ucic:set("nginx-ha","ShadowSocks","enable","0") + ucic:set("nginx-ha","VPN","enable","0") + ucic:set("qos","serverin","srchost",server_ip) + ucic:set("qos","serverout","dsthost",server_ip) + ucic:save("qos") + ucic:commit("qos") + end ucic:set("shadowsocks-libev","sss0","server",server_ip) + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") ucic:set("glorytun","vpn","host",server_ip) + ucic:save("glorytun") + ucic:commit("glorytun") ucic:set("mlvpn","general","host",server_ip) + ucic:save("mlvpn") + ucic:commit("mlvpn") luci.sys.call("uci -q del openvpn.omr.remote") luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) + ucic:save("openvpn") + ucic:commit("openvpn") + ucic:set("qos","serverin","srchost",server_ip) + ucic:set("qos","serverout","dsthost",server_ip) + ucic:save("qos") + ucic:commit("qos") end -- Set ShadowSocks settings @@ -105,9 +162,6 @@ function wizard_add() ucic:commit("shadowsocks-libev") end - -- Get VPN set by default - local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" - -- Set Glorytun settings if default_vpn:match("^glorytun.*") then ucic:set("glorytun","vpn","enable",1) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 6b3eabff9..d7cf9cbdf 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -4,8 +4,19 @@ local uci = require("luci.model.uci").cursor() local net = require "luci.model.network".init() local ifaces = net:get_interfaces() + local servers_ip = {} + local server_ip = uci:get("shadowsocks-libev","sss0","server") + if server_ip == '127.0.0.1' then + local upstreams = uci:get("nginx-ha","ShadowSocks","upstreams") + for _, up in pairs(upstreams) do + local a = up:match("^([^:]+):") + table.insert(servers_ip,a) + end + else + table.insert(servers_ip,server_ip) + end %> - + <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> @@ -14,17 +25,27 @@
<%:Server settings%>
<%:Put the values given by OpenMPTCProuter VPS script.%>
-
- +
+
- " data-type="ip4addr"> +
+ <% + local k = 0 + for _,server in ipairs(servers_ip) do + k = k+1 + %> +
-
- help - <%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%> -
+ <% + end + %> +
+
+ help + <%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
+
@@ -152,5 +173,5 @@
- + <%+footer%> diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 4d6f95f9d..9d1dc3fa5 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -4,4 +4,13 @@ uci -q batch <<-EOF add ucitrack openmptcprouter set ucitrack.@openmptcprouter[-1].init=openmptcprouter commit ucitrack -EOF \ No newline at end of file +EOF +if [ "$(uci -q get qos.serverin)" = "" ]; then + uci -q batch <<-EOF + set qos.serverin=classify + set qos.serverin.targer='Priority' + set qos.serverout=classify + set qos.serverout.targer='Priority' + commit qos + EOF +fi From 6b77296373ac85825e8dc8ec134ac6da8dcb573e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 27 Jun 2018 12:25:24 +0200 Subject: [PATCH 163/307] Fix display up/down of ShadowSocks --- omr-tracker/files/bin/omr-tracker-ss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 374b3fa7b..fdbe0ab1d 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -24,7 +24,7 @@ while true; do hosts="${hosts#* } $host" } if curl -s --socks5 "${proxy}" --max-time "${timeout}" "$host" &>/dev/null ; then - [ "${last}" -gt "${retry}" ] && log "Shadowsocks is up (can contact ${host})" + [ "${last}" -ge "${retry}" ] && log "Shadowsocks is up (can contact ${host})" /etc/init.d/shadowsocks-libev rules_up 2> /dev/null last=0 else From 1485da1b8c3f37c78410ba01c985be383fdc805d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 27 Jun 2018 19:57:08 +0200 Subject: [PATCH 164/307] Fix macvlan port change --- luci-mod-admin-full/root/etc/init.d/macvlan | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/luci-mod-admin-full/root/etc/init.d/macvlan b/luci-mod-admin-full/root/etc/init.d/macvlan index 56b9f6848..134331ca0 100755 --- a/luci-mod-admin-full/root/etc/init.d/macvlan +++ b/luci-mod-admin-full/root/etc/init.d/macvlan @@ -27,6 +27,17 @@ _setup_interface() { commit network EOF } + [ "$_type" = "macvlan" ] && { + local _interface + config_get _interface "$1" interface + [ -n "$_interface" ] && { + uci -q batch <<-EOF + delete network.$1.interface + set network.$1_dev.ifname=$_interface + commit network + EOF + } + } return 0 } From 9598b30c1a76407653284084ff0ae3b90b683fdd Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 27 Jun 2018 20:02:48 +0200 Subject: [PATCH 165/307] Add tcp_mem setting --- shadowsocks-libev/files/shadowsocks.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf index c901598ac..84036f5a0 100644 --- a/shadowsocks-libev/files/shadowsocks.conf +++ b/shadowsocks-libev/files/shadowsocks.conf @@ -25,7 +25,7 @@ net.ipv4.tcp_fin_timeout = 30 # short keepalive time #net.ipv4.tcp_keepalive_time = 2400 # outbound port range -net.ipv4.ip_local_port_range = 10000 65000 +net.ipv4.ip_local_port_range = 9999 65000 # max SYN backlog net.ipv4.tcp_max_syn_backlog = 4096 # max timewait sockets held by system simultaneously @@ -36,6 +36,8 @@ net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_rmem = 4096 87380 134217728 # TCP write buffer net.ipv4.tcp_wmem = 4096 65536 134217728 +# TCP buffer +net.ipv4.tcp_mem = 25600 51200 102400 # turn on path MTU discovery net.ipv4.tcp_mtu_probing = 1 From 932cb1fa042f630670dacadf45483a72d1554965 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 27 Jun 2018 20:04:14 +0200 Subject: [PATCH 166/307] Can choose interface for bypass traffic --- .../luasrc/view/omr-bypass/bypass.htm | 29 ++++++++++++++++++- .../root/etc/config/omr-bypass | 2 ++ .../root/etc/uci-defaults/41_omr-bypass | 6 ++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index ef99342bc..ec536880c 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -9,6 +9,8 @@ local dpi = uci:get_list("omr-bypass", "dpi", "proto") local tmpfile = os.tmpname() local dpi_available_proto = luci.util.execi("cat /proc/net/xt_ndpi/proto | awk '{print $3}' | sort -u | head -n -1") + local ifaces = sys.net:devices() + local bypassif = uci:get("omr-bypass","defaults","ifname") or "" %> <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %>
@@ -99,7 +101,32 @@
- + +
+
<%:Set interface you want to use for bypassed traffic.%>
+
+ +
+ +
+
+ help + <%:If empty, multipath master interface is used if up else any other up interface.%> +
+
+
+
diff --git a/luci-app-omr-bypass/root/etc/config/omr-bypass b/luci-app-omr-bypass/root/etc/config/omr-bypass index 867b37e8b..a07de0b89 100644 --- a/luci-app-omr-bypass/root/etc/config/omr-bypass +++ b/luci-app-omr-bypass/root/etc/config/omr-bypass @@ -1,3 +1,5 @@ +config defaults + config bypass 'ips' config bypass 'dpi' diff --git a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass index cf69f5e6e..89a1eec76 100644 --- a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass +++ b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass @@ -13,6 +13,12 @@ if [ "$(uci -q get omr-bypass.dpi)" = "" ]; then EOF fi +if [ "$(uci -q get omr-bypass.default)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set omr-bypass.defaults=defaults + EOF +fi + if [ "$(uci -q get ucitrack.@shadowsocks-libev[-1].affects)" = "" ]; then uci -q batch <<-EOF >/dev/null set ucitrack.@shadowsocks-libev[-1].affects=omr-bypass From a02ef92c5d4fec8514a0896883d6a345aad62931 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 27 Jun 2018 20:06:18 +0200 Subject: [PATCH 167/307] Fix bypass --- luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index ec536880c..1945f4da8 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -9,6 +9,7 @@ local dpi = uci:get_list("omr-bypass", "dpi", "proto") local tmpfile = os.tmpname() local dpi_available_proto = luci.util.execi("cat /proc/net/xt_ndpi/proto | awk '{print $3}' | sort -u | head -n -1") + local sys = require "luci.sys" local ifaces = sys.net:devices() local bypassif = uci:get("omr-bypass","defaults","ifname") or "" %> From 7d931c6e177df9eae44babfa3f154ee97165a9e9 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 27 Jun 2018 20:41:57 +0200 Subject: [PATCH 168/307] Nginx-HA change, even if it's not working yet... --- luci-app-nginx-ha/root/etc/init.d/nginx-ha | 5 +- .../share/omr/post-tracking.d/post-tracking | 62 ++++++++++++++----- 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/luci-app-nginx-ha/root/etc/init.d/nginx-ha b/luci-app-nginx-ha/root/etc/init.d/nginx-ha index 84e21bd5e..34f990de5 100755 --- a/luci-app-nginx-ha/root/etc/init.d/nginx-ha +++ b/luci-app-nginx-ha/root/etc/init.d/nginx-ha @@ -50,10 +50,7 @@ start_instance() { server { listen ${listen:-0.0.0.0:6666} udp; - proxy_pass ${1}; - } - server { - listen ${listen:-0.0.0.0:6666}; + listen ${listen:-0.0.0.0:6666} so_keepalive=off; proxy_pass ${1}; } " diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index c2519f867..68aa046dd 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -22,26 +22,52 @@ set_route() { if [ "$interface_gw" != "" ]; then _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" ip route replace default scope global nexthop via $interface_gw dev $interface_if && SETROUTE=true - ip route replace default via $interface_gw dev $interface_if table 991337 + if [ "$(uci -q get omr-bypass.defaults.ifname)" = "" ]; then + ip route replace default via $interface_gw dev $interface_if table 991337 + fi fi fi } set_ss_route() { - local server_ip + local server_ip upstreams nginxip config_get server_ip $1 server - if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then - _log "Set server $server_ip route via $OMR_TRACKER_DEVICE" - ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + if [ "$server_ip" = "127.0.0.1" ]; then + upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') + for up in $upstreams; do + _log "up : $up" + nginxip=$(echo $up | cut -d: -f1) + if [ "$nginxip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $nginxip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + _log "Set server $nginxip route via $OMR_TRACKER_DEVICE" + ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + fi + done + else + if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + _log "Set server $server_ip route via $OMR_TRACKER_DEVICE" + ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + fi fi } del_ss_route() { - local server_ip + local server_ip upstreams nginxip config_get server_ip $1 server - if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then - _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" - ip route delete $server_ip dev $OMR_TRACKER_DEVICE + if [ "$server_ip" = "127.0.0.1" ]; then + upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') + for up in $upstreams; do + _log "down : $up" + nginxip=$(echo $up | cut -d: -f1) + if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $nginxip)" != "" ]; then + _log "Remove server $nginxip route via $OMR_TRACKER_DEVICE" + ip route delete $nginxip dev $OMR_TRACKER_DEVICE + fi + done + else + if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then + _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" + ip route delete $server_ip dev $OMR_TRACKER_DEVICE + fi fi } @@ -89,12 +115,10 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE - if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then - if [ "$(uci -q show shadowsocks-libev.ss_rules.redir_udp)" = "hi2" ]; then - uci -q delete shadowsocks-libev.ss_rules.redir_udp - /etc/init.d/shadowsocks-libev rules_down - /etc/init.d/shadowsocks-libev rules_up - fi + if [ "$(uci -q show shadowsocks-libev.ss_rules.redir_udp)" = "hi2" ]; then + uci -q delete shadowsocks-libev.ss_rules.redir_udp + /etc/init.d/shadowsocks-libev rules_down + /etc/init.d/shadowsocks-libev rules_up fi fi exit 0 @@ -111,10 +135,16 @@ if [ "$multipath_config" = "master" ]; then config_load shadowsocks-libev config_foreach set_ss_route server fi - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 + if [ "$(uci -q get omr-bypass.defaults.ifname)" = "" ]; then + ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 + fi fi multipath_config="on" fi +if [ "$(uci -q get omr-bypass.defaults.ifname)" = "$OMR_TRACKER_DEVICE" ]; then + ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 +fi + [ "$multipath_config" = "on" ] && glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 up > /dev/null 2>&1 [ "$multipath_config" = "backup" ] && glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 backup > /dev/null 2>&1 [ "$multipath_status" = "$multipath_config" ] && exit 0 From 3b2ea336e9cd5508b5eb6efd63defb1d836693c4 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 28 Jun 2018 11:33:58 +0200 Subject: [PATCH 169/307] Remove limit to listen only on lan interface --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index fd3471f4f..79e86f6fc 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -15,12 +15,12 @@ if [ "$(uci -q show dhcp | grep 127.0.0.1#5353)" = "" ]; then commit dhcp EOF fi -if [ "$(uci -q get dhcp.@dnsmasq[-1].interface)" = "" ]; then - uci -q batch <<-EOF >/dev/null - add_list dhcp.@dnsmasq[-1].interface="lan" - commit dhcp - EOF -fi +#if [ "$(uci -q get dhcp.@dnsmasq[-1].interface)" = "" ]; then +# uci -q batch <<-EOF >/dev/null +# add_list dhcp.@dnsmasq[-1].interface="lan" +# commit dhcp +# EOF +#fi rm -f /tmp/luci-indexcache exit 0 From 848bb74e169191679ef99dba7a60e222503a440a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 28 Jun 2018 12:04:41 +0200 Subject: [PATCH 170/307] Remove limit even for previous config --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 79e86f6fc..0c312909e 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -15,12 +15,11 @@ if [ "$(uci -q show dhcp | grep 127.0.0.1#5353)" = "" ]; then commit dhcp EOF fi -#if [ "$(uci -q get dhcp.@dnsmasq[-1].interface)" = "" ]; then -# uci -q batch <<-EOF >/dev/null -# add_list dhcp.@dnsmasq[-1].interface="lan" -# commit dhcp -# EOF -#fi +uci -q batch <<-EOF >/dev/null + del dhcp.@dnsmasq[-1].interface + commit dhcp +EOF +fi rm -f /tmp/luci-indexcache exit 0 From af13d7f2c97157fe6da7be1098cd0ef1a26569c8 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 28 Jun 2018 15:44:55 +0200 Subject: [PATCH 171/307] Check Multipath status only if gateway up --- .../luasrc/controller/openmptcprouter.lua | 30 +++++++++---------- .../root/bin/omr-mptcp-intf | 6 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 06089cb28..96ae9ab95 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -383,7 +383,7 @@ function interfaces_status() local tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or "" local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") if tracker_ip ~= "" then - mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 5 http://ip.openmptcprouter.com") + mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ip.openmptcprouter.com") else mArray.openmptcprouter["ss_addr"] = "" end @@ -519,20 +519,6 @@ function interfaces_status() connectivity = 'ERROR' end - if mArray.openmptcprouter["dns"] == true then - -- Test if multipath can work on the connection - local multipath_available - local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) - if multipath_available_state == "" then - multipath_available = 'OK' - else - multipath_available = 'ERROR' - end - else - multipath_available = 'NO CHECK' - end - - -- Detect WAN gateway status local gw_ping = 'UP' if gateway == "" then @@ -554,6 +540,20 @@ function interfaces_status() if gateway == "" then connectivity = 'ERROR' end + + if mArray.openmptcprouter["dns"] == true and ifname ~= "" and gateway ~= "" and gw_ping == "UP" then + -- Test if multipath can work on the connection + local multipath_available + local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) + if multipath_available_state == "" then + multipath_available = 'OK' + else + multipath_available = 'ERROR' + end + else + multipath_available = 'NO CHECK' + end + -- Detect if WAN get an IPv6 local ipv6_discover = 'NONE' diff --git a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf index 4de062d19..6e8e020ef 100755 --- a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf +++ b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf @@ -1,10 +1,10 @@ #!/bin/sh uci -q batch <<-EOF >/dev/null - add_list dhcp.dnsmasq.ipset='/multipath-tcp.org/ss_rules_dst_bypass' + add_list dhcp.@dnsmasq[-1].ipset='/multipath-tcp.org/ss_rules_dst_bypass' commit dhcp EOF -curl -s -4 -m 5 --interface $1 http://www.multipath-tcp.org +curl -s -4 -m 3 --interface $1 http://www.multipath-tcp.org uci -q batch <<-EOF >/dev/null - del_list dhcp.dnsmasq.ipset='/multipath-tcp.org/ss_rules_dst_bypass' + del_list dhcp.@dnsmasq[-1].ipset='/multipath-tcp.org/ss_rules_dst_bypass' commit dhcp EOF From f68eaf4a027c5248f5f030ac8f8691a89176f6a6 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 28 Jun 2018 17:51:12 +0200 Subject: [PATCH 172/307] Increase timeout --- glorytun/init | 2 +- openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks | 2 +- shadowsocks-libev/files/shadowsocks-libev.config | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/glorytun/init b/glorytun/init index 7ea1f7c20..cbf6056f3 100755 --- a/glorytun/init +++ b/glorytun/init @@ -68,7 +68,7 @@ start_instance() { procd_append_param command \ retry count -1 const 5000000 \ - timeout 10000 \ + timeout 40000 \ keepalive count 5 idle 60 interval 2 procd_set_param respawn 0 30 0 diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 10dec8e79..9ce61135b 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -10,7 +10,7 @@ if [ "$NBCPU" -gt 2 ]; then set shadowsocks-libev.hi$c.local_address="0.0.0.0" set shadowsocks-libev.hi$c.local_port=1100 set shadowsocks-libev.hi$c.mode=tcp_and_udp - set shadowsocks-libev.hi$c.timeout=400 + set shadowsocks-libev.hi$c.timeout=600 set shadowsocks-libev.hi$c.fast_open=1 set shadowsocks-libev.hi$c.reuse_port=1 set shadowsocks-libev.hi$c.mptcp=1 diff --git a/shadowsocks-libev/files/shadowsocks-libev.config b/shadowsocks-libev/files/shadowsocks-libev.config index 490a99125..6cc32f466 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.config +++ b/shadowsocks-libev/files/shadowsocks-libev.config @@ -3,7 +3,7 @@ config ss_redir hi option local_address '::' option local_port '1100' option mode 'tcp_and_udp' - option timeout '400' + option timeout '600' option fast_open 1 option verbose 0 option reuse_port 1 @@ -15,7 +15,7 @@ config ss_redir hi2 option local_address '0.0.0.0' option local_port '1100' option mode 'tcp_and_udp' - option timeout '400' + option timeout '600' option fast_open 1 option verbose 0 option reuse_port 1 From e56dfd68f290398d219ee10e45baab44c048f3b0 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 28 Jun 2018 18:12:54 +0200 Subject: [PATCH 173/307] Increase ShadowSocks tracker timeout --- omr-tracker/files/etc/init.d/omr-tracker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 05407dda8..7cab9e554 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -81,7 +81,7 @@ _initialize_shadowsocks_tracker() { set shadowsocks-libev.tracker.local_address="127.0.0.1" set shadowsocks-libev.tracker.local_port=1111 set shadowsocks-libev.tracker.mode=tcp_and_udp - set shadowsocks-libev.tracker.timeout=60 + set shadowsocks-libev.tracker.timeout=600 set shadowsocks-libev.tracker.fast_open=1 set shadowsocks-libev.tracker.reuse_port=1 set shadowsocks-libev.tracker.mptcp=1 From 50363c396980848effda364663f8794151d883ec Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 28 Jun 2018 18:25:12 +0200 Subject: [PATCH 174/307] Update OBFS config --- shadowsocks-libev/files/shadowsocks-libev.init | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 12faf4a0e..75ecbf026 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -102,13 +102,13 @@ ss_mkjson_ss_redir_conf() { EOF [ "$obfs" = 0 ] && obfs=false || obfs=true if $obfs; then - obfs_options="--obfs $obfs_type" - [ -z "$obfs_host" ] || obfs_options="$obfs_options --obfs-host $obfs_host" - [ -z "$obfs_uri" ] || obfs_options="$obfs_options --obfs-uri $obfs_uri" - [ "$fast_open" = 1 ] && obfs_options="$obfs_options --fast-open" - [ "$mptcp" = 1 ] && obfs_options="$obfs_options --mptcp" + obfs_options="obfs=$obfs_type" + [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" + [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" + [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" cat <<-EOF - ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local $obfs_options${q},} + ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF fi } From 290918576fea9021ae55e3fffe2a2d96c9dc03ca Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 29 Jun 2018 13:49:21 +0200 Subject: [PATCH 175/307] Update ShadowSocks config for OBFS --- .../files/shadowsocks-libev.init | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 75ecbf026..3771253b2 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -82,14 +82,14 @@ ss_mkjson_ss_local_conf() { ss_mkjson_server_conf [ "$obfs" = 0 ] && obfs=false || obfs=true if $obfs; then - obfs_options="--obfs $obfs_type" - [ -z "$obfs_host" ] || obfs_options="$obfs_options --obfs-host $obfs_host" - [ -z "$obfs_uri" ] || obfs_options="$obfs_options --obfs-uri $obfs_uri" - [ "$fast_open" = 1 ] && obfs_options="$obfs_options --fast-open" - [ "$mptcp" = 1 ] && obfs_options="$obfs_options --mptcp" - [ -z "$timeout" ] || obfs_options="$obfs_options --timeout $timeout" + obfs_options="obfs=$obfs_type" + [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" + [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" + [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" + [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" cat <<-EOF - ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local $obfs_options${q},} + ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF fi } @@ -107,6 +107,7 @@ ss_mkjson_ss_redir_conf() { [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" + [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" cat <<-EOF ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF @@ -117,11 +118,11 @@ ss_mkjson_ss_server_conf() { ss_mkjson_server_conf_ [ "$obfs" = 0 ] && obfs=false || obfs=true if $obfs; then - obfs_options="--obfs $obfs_type" - [ "$fast_open" = 1 ] && obfs_options="$obfs_options --fast-open" - [ "$mptcp" = 1 ] && obfs_options="$obfs_options --mptcp" + obfs_options="obfs=$obfs_type" + [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" cat <<-EOF - ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-server $obfs_options${q},} + ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-server${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF fi } @@ -135,10 +136,10 @@ ss_mkjson_ss_tunnel_conf() { [ "$obfs" = 0 ] && obfs=false || obfs=true if $obfs; then obfs_options="obfs=$obfs_type" - [ -z "$obfs_host" ] || obfs_options="$obfs_options --obfs-host $obfs_host" - [ -z "$obfs_uri" ] || obfs_options="$obfs_options --obfs-uri $obfs_uri" + [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" + [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" cat <<-EOF - ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local $obfs_options${q},} + ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF fi } From b757773c8c9e65cfb12f5e5d09cad610984a0b55 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 29 Jun 2018 18:26:44 +0200 Subject: [PATCH 176/307] Fix in interface choice for OMR ByPass --- luci-app-omr-bypass/luasrc/controller/omr-bypass.lua | 3 +++ luci-app-omr-bypass/root/etc/config/omr-bypass | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua index 95272f27c..182e67b26 100644 --- a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua +++ b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua @@ -31,6 +31,9 @@ function bypass_add() dpi = {dpi} end ucic:set_list("omr-bypass","dpi","proto",dpi) + + local interface = luci.http.formvalue("cbid.omr-bypass.interface") or "" + ucic:set("omr-bypass","defaults","ifname",interface) ucic:save("omr-bypass") ucic:commit("omr-bypass") diff --git a/luci-app-omr-bypass/root/etc/config/omr-bypass b/luci-app-omr-bypass/root/etc/config/omr-bypass index a07de0b89..f62f6b418 100644 --- a/luci-app-omr-bypass/root/etc/config/omr-bypass +++ b/luci-app-omr-bypass/root/etc/config/omr-bypass @@ -1,4 +1,4 @@ -config defaults +config defaults 'defaults' config bypass 'ips' From 5baee9a93edc6f4b8ebbc7fd729286edb7525714 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 29 Jun 2018 18:27:21 +0200 Subject: [PATCH 177/307] Don't use Nginx HA for ShadowSocks --- .../luasrc/controller/openmptcprouter.lua | 14 +++++++++++--- .../luasrc/view/openmptcprouter/wizard.htm | 7 +++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 96ae9ab95..c33758bb5 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -88,11 +88,15 @@ function wizard_add() elseif default_vpn == "openvpn" then vpn_port = 65301 end + ucic:set("openmptcprouter","settings","vpn",default_vpn) + ucic:save("openmptcprouter") + ucic:commit("openmptcprouter") -- Get all servers ips local server_ip = luci.http.formvalue("server_ip") -- We have an IP, so set it everywhere if server_ip ~= "" then + local ss_ip -- Check if we have more than one IP, in this case use Nginx HA if (type(server_ip) == "table") then local ss_servers = {} @@ -100,6 +104,7 @@ function wizard_add() local k = 0 for _, ip in pairs(server_ip) do if k == 0 then + ss_ip=ip table.insert(ss_servers,ip .. ":65101 max_fails=3 fail_timeout=30s") table.insert(vpn_servers,ip .. ":65001 max_fails=3 fail_timeout=30s") ucic:set("qos","serverin","srchost",ip) @@ -119,6 +124,9 @@ function wizard_add() ucic:save("nginx-ha") ucic:commit("nginx-ha") server_ip = "127.0.0.1" + ucic:set("shadowsocks-libev","sss0","server",ss_ip) + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") else ucic:set("nginx-ha","ShadowSocks","enable","0") ucic:set("nginx-ha","VPN","enable","0") @@ -126,10 +134,10 @@ function wizard_add() ucic:set("qos","serverout","dsthost",server_ip) ucic:save("qos") ucic:commit("qos") + ucic:set("shadowsocks-libev","sss0","server",server_ip) + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") end - ucic:set("shadowsocks-libev","sss0","server",server_ip) - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") ucic:set("glorytun","vpn","host",server_ip) ucic:save("glorytun") ucic:commit("glorytun") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index d7cf9cbdf..f66a5a0ad 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -3,6 +3,7 @@ <% local uci = require("luci.model.uci").cursor() local net = require "luci.model.network".init() + local fs = require "nixio.fs" local ifaces = net:get_interfaces() local servers_ip = {} local server_ip = uci:get("shadowsocks-libev","sss0","server") @@ -28,8 +29,13 @@
+ <% + local has_nginxha = fs.access("/etc/config/nginx-ha") + if has_nginxha then + %>
<% + end local k = 0 for _,server in ipairs(servers_ip) do k = k+1 @@ -105,6 +111,7 @@ <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/openvpn") then %><% end %> +
From 7af4db3af7a9ca220d209206860338e96d8a5e32 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 29 Jun 2018 18:27:37 +0200 Subject: [PATCH 178/307] Fix Macvlan delete --- luci-mod-admin-full/root/etc/init.d/macvlan | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/luci-mod-admin-full/root/etc/init.d/macvlan b/luci-mod-admin-full/root/etc/init.d/macvlan index 134331ca0..ae58e9ec9 100755 --- a/luci-mod-admin-full/root/etc/init.d/macvlan +++ b/luci-mod-admin-full/root/etc/init.d/macvlan @@ -17,6 +17,17 @@ _setup_interface() { eth*.*) return ;; esac + [[ $1 =~ "_dev" ]] && { + local _intfdev=$(sed 's/_dev//' $1) + uci -q get "network.$_intfdev.ifname" >/dev/null && { + uci -q batch <<-EOF + delete network.$1 + commit network + EOF + } + return + } + local _type config_get _type "$1" type From 564e3e40be01e85f6584a68a6812dd13d8dd818f Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 29 Jun 2018 18:28:09 +0200 Subject: [PATCH 179/307] Fix in tracking --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 68aa046dd..e5852c001 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -141,7 +141,7 @@ if [ "$multipath_config" = "master" ]; then fi multipath_config="on" fi -if [ "$(uci -q get omr-bypass.defaults.ifname)" = "$OMR_TRACKER_DEVICE" ]; then +if [ "$(uci -q get omr-bypass.defaults.ifname)" = "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show table 991337 | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 fi From 83736be9b66afe13e39fe9cc605e92f40c8756c0 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 29 Jun 2018 18:28:25 +0200 Subject: [PATCH 180/307] Increase ShadowSocks timeout --- openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 9ce61135b..ae9faeec9 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -21,14 +21,14 @@ if [ "$NBCPU" -gt 2 ]; then fi fi -if [ "$(uci -q get shadowsocks-libev.hi.timeout)" != "400" ]; then +if [ "$(uci -q get shadowsocks-libev.hi.timeout)" != "600" ]; then uci -q batch <<-EOF > /dev/null - set shadowsocks-libev.hi.timeout=400 + set shadowsocks-libev.hi.timeout=600 commit shadowsocks-libev EOF for c in $(seq 2 $NBCPU); do uci -q batch <<-EOF > /dev/null - set shadowsocks-libev.hi$c.timeout=400 + set shadowsocks-libev.hi$c.timeout=600 commit shadowsocks-libev EOF done From b5f950804fca35454a58966811497113d5837cea Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 30 Jun 2018 14:39:19 +0200 Subject: [PATCH 181/307] Fix interface setting for omr-bypass --- luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index 1945f4da8..e427ac267 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -108,7 +108,7 @@
- <% for _, iface in ipairs(ifaces) do From 756c739af47f7d45bd7aa13281b5b2f86e59f530 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 30 Jun 2018 16:19:29 +0200 Subject: [PATCH 182/307] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff6a7e01e..5328202d6 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Added support to gateway set by user for 6in4. Used for IPv6 over the glorytun I *Description:* Luci interface to bypass domains, IPs and networks with shadowsocks -Domains, IPs and networks added are bypassed when shadowsocks is used. This can be used when VPS IP is blacklisted from some sites. +Domains, IPs, networks and protocol (using DPI) added are bypassed when shadowsocks is used. This can be used when VPS IP is blacklisted from some sites. ## omr-tracker From c1be5273b60fa121dddac915aaafa846b0c6b5c2 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 30 Jun 2018 17:36:23 +0200 Subject: [PATCH 183/307] Fix link to interfaces in multipath graph --- luci-app-mptcp/luasrc/view/mptcp/multipath.htm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm index 748c5dac7..467c81061 100644 --- a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm +++ b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm @@ -35,11 +35,7 @@ end end - local curdev = luci.dispatcher.context.requestpath - curdev = curdev[#curdev] ~= "bandwidth" and curdev[#curdev] or devices[1] - if curdev == "" then - curdev = "all" - end + local curdev = luci.http.formvalue("dev") or "all" -%> <%+header%> @@ -769,7 +765,7 @@ From b9c990962af1c758f25d4c9137757ee32b964275 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 07:29:41 +0200 Subject: [PATCH 184/307] Fix macvlan --- luci-mod-admin-full/root/etc/init.d/macvlan | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-mod-admin-full/root/etc/init.d/macvlan b/luci-mod-admin-full/root/etc/init.d/macvlan index ae58e9ec9..a40e80710 100755 --- a/luci-mod-admin-full/root/etc/init.d/macvlan +++ b/luci-mod-admin-full/root/etc/init.d/macvlan @@ -17,7 +17,7 @@ _setup_interface() { eth*.*) return ;; esac - [[ $1 =~ "_dev" ]] && { + [ "$(echo $1 | grep _dev)" != "" ] && { local _intfdev=$(sed 's/_dev//' $1) uci -q get "network.$_intfdev.ifname" >/dev/null && { uci -q batch <<-EOF From 5c42eff2e67800331279446dc1376508c03ab719 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 08:19:04 +0200 Subject: [PATCH 185/307] Add rng-tools to generate more entropy --- openmptcprouter-full/Makefile | 1 + .../files/etc/uci-defaults/2001-omr-rng | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100755 openmptcprouter/files/etc/uci-defaults/2001-omr-rng diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 70254092c..1c42c3725 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -41,6 +41,7 @@ MY_DEPENDS := \ luci-proto-3g \ luci-app-mlvpn mlvpn \ omr-update \ + rng-tools \ openvpn-openssl \ kmod-rt2800-usb libimobiledevice \ kmod-mt7601u \ diff --git a/openmptcprouter/files/etc/uci-defaults/2001-omr-rng b/openmptcprouter/files/etc/uci-defaults/2001-omr-rng new file mode 100755 index 000000000..812919479 --- /dev/null +++ b/openmptcprouter/files/etc/uci-defaults/2001-omr-rng @@ -0,0 +1,14 @@ +#!/bin/sh + +uci -q show system.@rngd[0] || { + uci add system rngd + uci set system.@rngd[0].device=/dev/urandom + uci commit +} + +uci -q batch <<-EOF >/dev/null + set system.@rngd[0].enabled=1 + commit system +EOF + +exit 0 From c94244ad678c2324d8db64b04d8bf7e3ee8b507c Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 10:22:02 +0200 Subject: [PATCH 186/307] Fix https://github.com/Ysurac/openmptcprouter/issues/98 --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index c33758bb5..6b5363b5e 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -29,7 +29,7 @@ function wizard_add() if sectionname:match("^wan(%d+)$") then i = i + 1 end - if uci:get("network",sectionname,"multipath") == "master" then + if ucic:get("network",sectionname,"multipath") == "master" then multipath_master = true end end) From 44059b7b4df097d57a5c14d52dc012337fd0551e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 16:21:10 +0200 Subject: [PATCH 187/307] Fix QoS --- .../root/etc/uci-defaults/openmptcprouter | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 9d1dc3fa5..f6886ccb3 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -8,9 +8,16 @@ EOF if [ "$(uci -q get qos.serverin)" = "" ]; then uci -q batch <<-EOF set qos.serverin=classify - set qos.serverin.targer='Priority' + set qos.serverin.target='Priority' set qos.serverout=classify - set qos.serverout.targer='Priority' + set qos.serverout.target='Priority' + commit qos + EOF +fi +if [ "$(uci -q get qos.serverin.target)" = "" ]; then + uci -q batch <<-EOF + set qos.serverin.target='Priority' + set qos.serverout.target='Priority' commit qos EOF fi From b901339cdfd583eeda878edccc8eb7fa27fd572d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 17:46:23 +0200 Subject: [PATCH 188/307] Fix binder path manager --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 25e13c38f..802747d48 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -16,7 +16,7 @@ local mtcppm = s:option(ListValue, "mptcp_path_manager", translate("Multipath TC mtcppm:value("default", translate("default")) mtcppm:value("fullmesh", translate("fullmesh")) mtcppm:value("ndiffports", translate("ndiffports")) -mtcppm:value("blinder", translate("blinder")) +mtcppm:value("binder", translate("binder")) local mtcpsch = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler")) mtcpsch:value("default", translate("default")) mtcpsch:value("roundrobin", translate("round-robin")) From 95385a77a76e086f454d902565fc3717e54ae0aa Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 20:02:25 +0200 Subject: [PATCH 189/307] Working MLVPN markfoodyburton version --- mlvpn/Makefile | 16 ++++++++-------- mlvpn/files/etc/init.d/mlvpn | 4 +++- mlvpn/patches/020-config-bindaddr.patch | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 mlvpn/patches/020-config-bindaddr.patch diff --git a/mlvpn/Makefile b/mlvpn/Makefile index aeb080cf0..b61c83b9d 100644 --- a/mlvpn/Makefile +++ b/mlvpn/Makefile @@ -8,17 +8,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mlvpn -PKG_VERSION:=6f13423b -#PKG_VERSION:=8002488 +#PKG_VERSION:=6f13423b +PKG_VERSION:=54ba2d8 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git -PKG_SOURCE_VERSION:=6f13423b8108f46edb9f230deee20e3741abe64c -PKG_SOURCE_DATE:=2017-09-01 -#PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git -#PKG_SOURCE_VERSION:=8002488c20438c51fb68fa51f7df115dd2f7dafb -#PKG_SOURCE_DATE:=2018-06-11 +#PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git +#PKG_SOURCE_VERSION:=6f13423b8108f46edb9f230deee20e3741abe64c +#PKG_SOURCE_DATE:=2017-09-01 +PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git +PKG_SOURCE_VERSION:=54ba2d837a20bcb59cf2e690354d132152cdf79f +PKG_SOURCE_DATE:=2018-07-01 PKG_LICENSE:=BSD-2-Clause PKG_MAINTAINER:=Ycarus (Yannick Chabanois) diff --git a/mlvpn/files/etc/init.d/mlvpn b/mlvpn/files/etc/init.d/mlvpn index f7a813738..a1e1630ae 100755 --- a/mlvpn/files/etc/init.d/mlvpn +++ b/mlvpn/files/etc/init.d/mlvpn @@ -42,7 +42,8 @@ start_service() { [ "${enable}" = "1" ] || return 1 if [ "$(uci -q get network.omrvpn)" != "" ]; then - uci -q set network.omrvpn.ifname=mlvpn0 + uci -q set network.omrvpn.ifname=${interface_name} + uci -q commit fi cat > /tmp/etc/${interface_name}.conf <<-EOF @@ -51,6 +52,7 @@ start_service() { mode = "${mode}" interface_name = "${interface_name}" timeout = ${timeout} + reorder_buffer = yes reorder_buffer_size = ${reorder_buffer_size} loss_tolerence = ${loss_tolerence} password = "${password}" diff --git a/mlvpn/patches/020-config-bindaddr.patch b/mlvpn/patches/020-config-bindaddr.patch new file mode 100644 index 000000000..e012d49a0 --- /dev/null +++ b/mlvpn/patches/020-config-bindaddr.patch @@ -0,0 +1,16 @@ +--- a/src/config.c 2018-07-01 19:02:09.192210482 +0200 ++++ b/src/config.c 2018-07-01 19:03:13.263404635 +0200 +@@ -302,9 +302,11 @@ + config, lastSection, "remoteport", &dstport, NULL, + "No remote port specified.\n", 1); + } +- +- bindaddr=ip_from_if(bindaddr); + ++ if (bindaddr) ++ { ++ bindaddr=ip_from_if(bindaddr); ++ } + + _conf_set_uint_from_conf( + config, lastSection, "bandwidth_upload", &bwlimit, 0, From 4c722c3e8a11c164d27fd09fc3de16bf4d0cfae3 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 20:21:02 +0200 Subject: [PATCH 190/307] Update glorytun init to use interface set --- glorytun-udp/init | 24 ++++++++++++++++++++++-- glorytun/init | 3 ++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/glorytun-udp/init b/glorytun-udp/init index 8477bcebf..42259caa0 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -34,7 +34,7 @@ validate_section() { } start_instance() { - local enable key host port dev listener proto bind bindport mtu mtuauto chacha20 + local enable key host port listener proto bind bindport mtu mtuauto chacha20 dev validate_section "${1}" || { _err "validation failed" @@ -53,7 +53,8 @@ start_instance() { key="" if [ "$(uci -q get network.omrvpn)" != "" ]; then - uci -q set network.omrvpn.ifname=tun0 + uci -q set network.omrvpn.ifname=$dev + uci -q commit fi _log "starting ${PROG_NAME} ${1} instance $*" @@ -78,9 +79,28 @@ start_instance() { procd_set_param stderr 1 procd_close_instance + + #config_load network + #config_foreach add_glorytun_path interface + +} + +add_glorytun_path() { + case "$1" in + loopback|lan|if0|*tun*|ifb*) return ;; + esac + local multipath + network_get_ipaddr ipaddr "$1" + config_get multipath "$1" multipath "off" + case "$multipath" in + master|on) glorytun-udp path "$ipaddr" dev $dev up ;; + backup) glorytun-udp path "$ipaddr" dev $dev backup ;; + *) glorytun-udp path "$ipaddr" dev $dev down ;; + esac } start_service() { + local dev config_load glorytun config_foreach start_instance glorytun } diff --git a/glorytun/init b/glorytun/init index cbf6056f3..ab7e6933e 100755 --- a/glorytun/init +++ b/glorytun/init @@ -50,7 +50,8 @@ start_instance() { key="" if [ "$(uci -q get network.omrvpn)" != "" ]; then - uci -q set network.omrvpn.ifname=tun0 + uci -q set network.omrvpn.ifname=${dev} + uci -q commit network fi _log "starting ${PROG_NAME} ${1} instance $*" From 1ad098eb51ffa6ecdb467b6c81e243760794b914 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 1 Jul 2018 20:50:03 +0200 Subject: [PATCH 191/307] Fix MLVPN, this time aggregation is working --- mlvpn/files/etc/init.d/mlvpn | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mlvpn/files/etc/init.d/mlvpn b/mlvpn/files/etc/init.d/mlvpn index a1e1630ae..f85e5baa6 100755 --- a/mlvpn/files/etc/init.d/mlvpn +++ b/mlvpn/files/etc/init.d/mlvpn @@ -22,11 +22,16 @@ interface_multipath_settings() { id=$(($id+1)) config_get mode "$config" multipath "off" [ "$mode" = "off" ] && return 1 + config_get ifname "$config" ifname + [ -z "$ifname" ] && ifname=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') + [ -z "$ifname" ] && return 1 count=$(($count+1)) port=$((firstport+count)) cat >> /tmp/etc/${interface_name}.conf <<-EOF [${id}] + bindhost = "${ifname}" + bindport = "${port}" remotehost = "${host}" remoteport = "${port}" EOF From 1a30dcb48e99614d92dddb3bb8260947e63c592a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 2 Jul 2018 13:52:36 +0200 Subject: [PATCH 192/307] Set omrvpn interface using wizard --- .../luasrc/controller/openmptcprouter.lua | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 6b5363b5e..e1727ab3b 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -80,20 +80,29 @@ function wizard_add() -- Get VPN set by default local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" - local vpn_port + local vpn_port = "" + local vpn_intf = "" if default_vpn:match("^glorytun.*") then vpn_port = 65001 + vpn_intf = "tun0" elseif default_vpn == "mlvpn" then vpn_port = 65201 + vpn_intf = "mlvpn0" elseif default_vpn == "openvpn" then vpn_port = 65301 + vpn_intf = "tun0" + end + if vpn_intf ~= "" then + ucic:set("network","omrvpn","ifname",vpn_intf) + ucic:save("network") + ucic:commit("network") end ucic:set("openmptcprouter","settings","vpn",default_vpn) ucic:save("openmptcprouter") ucic:commit("openmptcprouter") -- Get all servers ips - local server_ip = luci.http.formvalue("server_ip") + local server_ip = luci.http.formvalue("server_ip") or "" -- We have an IP, so set it everywhere if server_ip ~= "" then local ss_ip @@ -106,14 +115,18 @@ function wizard_add() if k == 0 then ss_ip=ip table.insert(ss_servers,ip .. ":65101 max_fails=3 fail_timeout=30s") - table.insert(vpn_servers,ip .. ":65001 max_fails=3 fail_timeout=30s") + if vpn_port ~= "" then + table.insert(vpn_servers,ip .. ":" .. vpn_port .. " max_fails=3 fail_timeout=30s") + end ucic:set("qos","serverin","srchost",ip) ucic:set("qos","serverout","dsthost",ip) ucic:save("qos") ucic:commit("qos") else table.insert(ss_servers,ip .. ":65101 backup") - table.insert(vpn_servers,ip .. ":65001 backup") + if vpn_port ~= "" then + table.insert(vpn_servers,ip .. ":" .. vpn_port .. " backup") + end end k = k + 1 end From 84925793aa61ab9ee194e299d477935d35b9ed0b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 2 Jul 2018 17:17:58 +0200 Subject: [PATCH 193/307] Add setting to remove some dirty log for OpenVPN --- openmptcprouter/files/etc/uci-defaults/2020-omr-vpn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index f75612766..9089f11ff 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -31,6 +31,8 @@ if [ "$(uci -q get openvpn.omr)" = "" ]; then set openvpn.omr.proto=tcp-client set openvpn.omr.compress=lz4 set openvpn.omr.enabled=0 + set openvpn.omr.ncp_disable=1 + set openvpn.omr.auth_nocache=1 commit openvpn EOF fi From 472fb8b55348480ada9b33a5980d4b47091742ad Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 2 Jul 2018 17:18:26 +0200 Subject: [PATCH 194/307] Add link to multipath-tcp site for help on MPTCP settings --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 802747d48..26ff1346d 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -3,7 +3,7 @@ local sys = require "luci.sys" local ifaces = sys.net:devices() local m, s, o -m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings")) +m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings"), translate("Visit http://multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP for help.")) s = m:section(TypedSection, "globals") local mtcpg = s:option(ListValue, "multipath", translate("Multipath TCP")) From 45307dc2d5d03a673294bf0872b2fe47864a6a35 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 2 Jul 2018 20:33:25 +0200 Subject: [PATCH 195/307] Fix diag address --- .../root/etc/uci-defaults/50_luci-mod-admin-full | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full b/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full index 372eb1512..6c19e34d1 100755 --- a/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full +++ b/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full @@ -12,9 +12,9 @@ if [ "$(uci -q get luci.diag)" != "internal" ]; then uci -q batch <<-EOF >/dev/null set luci.diag=internal - set luci.diag.dns='${host:-openwrt.org}' - set luci.diag.ping='${host:-openwrt.org}' - set luci.diag.route='${host:-openwrt.org}' + set luci.diag.dns='openmptcprouter.com' + set luci.diag.ping='openmptcprouter.com' + set luci.diag.route='openmptcprouter.com' commit luci EOF fi From c3147b8d5b876a4fa40073ecc27a3a0aa9d8b539 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 2 Jul 2018 22:46:26 +0200 Subject: [PATCH 196/307] Activate/Desactivate DHCP and ra server using OMR advanced settings IPv6 --- .../luasrc/controller/openmptcprouter.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index e1727ab3b..ea6cd217e 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -298,13 +298,17 @@ function settings_add() ucic:save("firewall") ucic:commit("firewall") ucic:set("dhcp","lan","ra_default",disable_ipv6) - ucic:save("dhcp") - ucic:commit("dhcp") if disable_ipv6 == 1 then + luci.sys.call("uci -q del dhcp.lan.dhcpv6") + luci.sys.call("uci -q del dhcp.lan.ra") ucic:set("shadowsocks-libev","hi","local_address","0.0.0.0") else + ucic:set("dhcp","lan","dhcpv6","server") + ucic:set("dhcp","lan","ra","server") ucic:set("shadowsocks-libev","hi","local_address","::") end + ucic:save("dhcp") + ucic:commit("dhcp") ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") From 19dd42476560dc58c51a05f310a1894ad4f99618 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 3 Jul 2018 14:04:01 +0200 Subject: [PATCH 197/307] Check if no ifname defined --- .../luasrc/controller/openmptcprouter.lua | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index ea6cd217e..def7bc26a 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -527,17 +527,20 @@ function interfaces_status() if ifname == "" then ifname = get_device(interface) end + --if multipath == "off" and not ifname:match("^tun.*") then return end if multipath == "off" then return end local asn - local connectivity - local multipath_state = ut.trim(sys.exec("multipath " .. ifname .. " | grep deactivated")) - if multipath_state == "" and ifname ~= "" then - connectivity = 'OK' - else - connectivity = 'ERROR' + + if ifname ~= "" and ifname ~= nil then + local multipath_state = ut.trim(sys.exec("multipath " .. ifname .. " | grep deactivated")) + if multipath_state == "" then + connectivity = 'OK' + else + connectivity = 'ERROR' + end end if ipaddr == "" then @@ -549,7 +552,7 @@ function interfaces_status() if gateway == "" then gateway = get_gateway(interface) end - if gateway == "" then + if gateway == "" and ifname ~= nil then gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) end if gateway ~= "" then @@ -566,7 +569,7 @@ function interfaces_status() connectivity = 'ERROR' end - if mArray.openmptcprouter["dns"] == true and ifname ~= "" and gateway ~= "" and gw_ping == "UP" then + if mArray.openmptcprouter["dns"] == true and ifname ~= nil and gateway ~= "" and gw_ping == "UP" then -- Test if multipath can work on the connection local multipath_available local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) @@ -582,7 +585,8 @@ function interfaces_status() -- Detect if WAN get an IPv6 local ipv6_discover = 'NONE' - if tonumber((sys.exec("sysctl net.ipv6.conf.all.disable_ipv6")):match(" %d+")) == 0 then + if ifname ~= nil then + if tonumber((sys.exec("sysctl net.ipv6.conf.all.disable_ipv6")):match(" %d+")) == 0 then local ipv6_result = _ipv6_discover(ifname) if type(ipv6_result) == "table" and #ipv6_result > 0 then local ipv6_addr_test @@ -598,6 +602,7 @@ function interfaces_status() end end end + end end local publicIP = "-" From 3c34672ba17476ebd9154e26c0e460d311705598 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 3 Jul 2018 15:11:22 +0200 Subject: [PATCH 198/307] Update translation --- luci-app-omr-bypass/po/fr/omr-bypass.po | 12 ++++++++++++ luci-app-omr-bypass/po/templates/omr-bypass.pot | 8 ++++++++ luci-app-openmptcprouter/po/fr/openmptcprouter.po | 3 +-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/luci-app-omr-bypass/po/fr/omr-bypass.po b/luci-app-omr-bypass/po/fr/omr-bypass.po index b77dc3192..c88f9c47a 100644 --- a/luci-app-omr-bypass/po/fr/omr-bypass.po +++ b/luci-app-omr-bypass/po/fr/omr-bypass.po @@ -18,6 +18,13 @@ msgstr "Contourne" msgid "Domain, IP or network" msgstr "Domaine, IP ou réseau" +msgid "" +"If empty, multipath master interface is used if up else any other up " +"interface." +msgstr "" +"Si vide, l'interface définie en tant que maître multipath est utilisée si " +"elle fonctionne, sinon une autre interface sera utilisée." + msgid "OMR-Bypass" msgstr "" @@ -28,6 +35,11 @@ msgid "Set domains name, ips or networks you want to bypass." msgstr "" "Configurer les domaines, adresses IPs ou réseaux que vous voulez contourner." +msgid "Set interface you want to use for bypassed traffic." +msgstr "" +"Configurer l'interface que vous souhaitez utiliser pour le trafic à " +"contourner." + msgid "Set protocols you want to bypass." msgstr "Configurer les protocoles que vous voulez contourner." diff --git a/luci-app-omr-bypass/po/templates/omr-bypass.pot b/luci-app-omr-bypass/po/templates/omr-bypass.pot index f561277e7..f96144608 100644 --- a/luci-app-omr-bypass/po/templates/omr-bypass.pot +++ b/luci-app-omr-bypass/po/templates/omr-bypass.pot @@ -7,6 +7,11 @@ msgstr "" msgid "Domain, IP or network" msgstr "" +msgid "" +"If empty, multipath master interface is used if up else any other up " +"interface." +msgstr "" + msgid "OMR-Bypass" msgstr "" @@ -16,6 +21,9 @@ msgstr "" msgid "Set domains name, ips or networks you want to bypass." msgstr "" +msgid "Set interface you want to use for bypassed traffic." +msgstr "" + msgid "Set protocols you want to bypass." msgstr "" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 3c75e0050..966348b39 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -49,8 +49,7 @@ msgid "Interfaces settings" msgstr "Paramètres des interfaces" msgid "MLVPN can replace Glorytun with connections with same latency" -msgstr "" -"MLVPN peut remplacer Glorytun pour les connexions avec la même latence" +msgstr "MLVPN peut remplacer Glorytun pour les connexions avec la même latence" msgid "MLVPN password" msgstr "Mot de passe MLVPN" From e00cf0f4f05dd9ced9c5845762319b9dcf261f6c Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 3 Jul 2018 15:11:54 +0200 Subject: [PATCH 199/307] static IPv6 for omr-6in4 --- omr-6in4/files/etc/uci-defaults/9010-omr-6in4 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 b/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 index 2721775aa..012388735 100755 --- a/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 +++ b/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 @@ -11,6 +11,15 @@ if [ "$(uci -q show network | grep omr6in4)" = "" ]; then set network.omr6in4.ipaddr=10.255.255.2 set network.omr6in4.peeraddr=10.255.255.1 set network.omr6in4.gateway=fe80::a00:1 + set network.omr6in4.ip6addr=fe80::a00:2 + commit network + EOF + rm -f /tmp/luci-indexcache +fi + +if [ "$(uci -q get network.omr6in4.ip6addr)" = "" ]; then + uci -q batch <<-EOF + set network.omr6in4.ip6addr=fe80::a00:2 commit network EOF rm -f /tmp/luci-indexcache From 6b6c7e6d7a53c93ee1ae9eddcadb97349d3c368b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 3 Jul 2018 16:03:20 +0200 Subject: [PATCH 200/307] Update luci-base and luci-mod-admin-full to latest upstream version --- luci-base/Makefile | 15 +- luci-base/htdocs/luci-static/resources/cbi.js | 129 +- luci-base/htdocs/luci-static/resources/xhr.js | 3 +- luci-base/luasrc/dispatcher.lua | 17 +- luci-base/luasrc/tools/status.lua | 86 +- luci-base/luasrc/view/cbi/apply_widget.htm | 2 +- luci-base/luasrc/view/cbi/button.htm | 2 +- .../luasrc/view/cbi/cell_valueheader.htm | 10 +- luci-base/luasrc/view/cbi/dropdown.htm | 12 + .../luasrc/view/cbi/firewall_zoneforwards.htm | 79 +- luci-base/luasrc/view/cbi/footer.htm | 2 - .../luasrc/view/cbi/full_valuefooter.htm | 1 - luci-base/luasrc/view/cbi/map.htm | 3 - luci-base/luasrc/view/cbi/nsection.htm | 9 +- luci-base/luasrc/view/cbi/nullsection.htm | 5 +- luci-base/luasrc/view/cbi/simpleform.htm | 15 +- luci-base/luasrc/view/cbi/tblsection.htm | 208 ++- luci-base/luasrc/view/cbi/tsection.htm | 18 +- luci-base/luasrc/view/cbi/upload.htm | 2 +- luci-base/luasrc/view/sysauth.htm | 10 +- luci-base/po/ca/base.po | 62 +- luci-base/po/cs/base.po | 86 +- luci-base/po/de/base.po | 90 +- luci-base/po/el/base.po | 59 +- luci-base/po/en/base.po | 56 +- luci-base/po/es/base.po | 86 +- luci-base/po/fr/base.po | 86 +- luci-base/po/he/base.po | 73 +- luci-base/po/hu/base.po | 86 +- luci-base/po/it/base.po | 87 +- luci-base/po/ja/base.po | 88 +- luci-base/po/ko/base.po | 68 +- luci-base/po/ms/base.po | 53 +- luci-base/po/no/base.po | 86 +- luci-base/po/pl/base.po | 179 ++- luci-base/po/pt-br/base.po | 86 +- luci-base/po/pt/base.po | 84 +- luci-base/po/ro/base.po | 56 +- luci-base/po/ru/base.po | 88 +- luci-base/po/sk/base.po | 50 +- luci-base/po/sv/base.po | 62 +- luci-base/po/templates/base.pot | 50 +- luci-base/po/tr/base.po | 56 +- luci-base/po/uk/base.po | 1129 ++++++++--------- luci-base/po/vi/base.po | 50 +- luci-base/po/zh-cn/base.po | 139 +- luci-base/po/zh-tw/base.po | 82 +- .../luasrc/controller/admin/network.lua | 10 + .../luasrc/controller/admin/system.lua | 2 +- .../luasrc/model/cbi/admin_network/vlan.lua | 4 +- .../luasrc/model/cbi/admin_system/admin.lua | 9 +- .../luasrc/view/admin_network/diagnostics.htm | 138 +- .../view/admin_network/diagnostics.htm.rej | 61 + .../view/admin_network/iface_overview.htm | 73 +- .../view/admin_network/iface_status.htm | 59 +- .../view/admin_network/lease_status.htm | 110 +- .../view/admin_network/switch_status.htm | 32 +- .../view/admin_network/wifi_assoclist.htm | 82 ++ .../luasrc/view/admin_network/wifi_join.htm | 48 +- .../view/admin_network/wifi_overview.htm | 200 +-- .../luasrc/view/admin_network/wifi_status.htm | 47 +- .../luasrc/view/admin_status/bandwidth.htm | 33 +- .../luasrc/view/admin_status/connections.htm | 2 + .../luasrc/view/admin_status/index.htm | 303 +---- .../luasrc/view/admin_status/iptables.htm | 108 +- .../luasrc/view/admin_status/load.htm | 2 + .../luasrc/view/admin_status/routes.htm | 113 +- .../luasrc/view/admin_status/wireless.htm | 4 +- .../luasrc/view/admin_system/flashops.htm | 139 +- .../luasrc/view/admin_system/packages.htm | 150 +-- .../luasrc/view/admin_system/reboot.htm | 3 +- .../luasrc/view/admin_uci/changelog.htm | 10 +- .../luasrc/view/admin_uci/changes.htm | 22 +- .../luasrc/view/admin_uci/revert.htm | 2 +- .../luci-static/openmptcprouter/cascade.css | 302 +++-- 75 files changed, 3309 insertions(+), 2564 deletions(-) create mode 100644 luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm.rej create mode 100644 luci-mod-admin-full/luasrc/view/admin_network/wifi_assoclist.htm diff --git a/luci-base/Makefile b/luci-base/Makefile index 264bfe9f4..fc8a31d2a 100644 --- a/luci-base/Makefile +++ b/luci-base/Makefile @@ -14,12 +14,13 @@ LUCI_BASENAME:=base LUCI_TITLE:=LuCI core libraries LUCI_DEPENDS:=+lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc +liblucihttp-lua -PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 -PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet -PKG_HASH:=ed7680f2896269ae8633756e7edcf09050812f78c8f49e280e63c30d14f35aea -PKG_LICENSE:=Apache-2.0 -HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1 +PKG_SOURCE:=v1.0.0.tar.gz +PKG_SOURCE_URL:=https://github.com/jirutka/luasrcdiet/archive/ +PKG_HASH:=48162e63e77d009f5848f18a5cabffbdfc867d0e5e73c6d407f6af5d6880151b +PKG_LICENSE:=MIT + +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/luasrcdiet-1.0.0 include $(INCLUDE_DIR)/host-build.mk @@ -36,13 +37,13 @@ endef define Host/Compile $(MAKE) -C src/ clean po2lmo - $(MAKE) -C $(HOST_BUILD_DIR) bin/LuaSrcDiet.lua + $(MAKE) -C $(HOST_BUILD_DIR) bin/luasrcdiet endef define Host/Install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo - $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/LuaSrcDiet.lua $(1)/bin/LuaSrcDiet + $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/luasrcdiet $(1)/bin/luasrcdiet endef $(eval $(call HostBuild)) diff --git a/luci-base/htdocs/luci-static/resources/cbi.js b/luci-base/htdocs/luci-static/resources/cbi.js index a7f999d87..6a487366f 100644 --- a/luci-base/htdocs/luci-static/resources/cbi.js +++ b/luci-base/htdocs/luci-static/resources/cbi.js @@ -620,7 +620,11 @@ function cbi_init() { } document.querySelectorAll('.cbi-dropdown').forEach(function(s) { - cbi_dropdown_init(s); + cbi_dropdown_init(s); + }); + + document.querySelectorAll('.cbi-tooltip:not(:empty)').forEach(function(s) { + s.parentNode.classList.add('cbi-tooltip-container'); }); cbi_d_update(); @@ -1232,14 +1236,13 @@ function cbi_validate_field(cbid, optional, type) function cbi_row_swap(elem, up, store) { - var tr = elem.parentNode; - - while (tr && !tr.classList.contains('cbi-section-table-row')) - tr = tr.parentNode; + var tr = findParent(elem.parentNode, '.cbi-section-table-row'); if (!tr) return false; + tr.classList.remove('flash'); + if (up) { var prev = tr.previousElementSibling; @@ -1277,6 +1280,9 @@ function cbi_row_swap(elem, up, store) if (input) input.value = ids.join(' '); + window.scrollTo(0, tr.offsetTop); + window.setTimeout(function() { tr.classList.add('flash'); }, 1); + return false; } @@ -1522,6 +1528,19 @@ function toElem(s) return elem || null; } +function findParent(node, selector) +{ + while (node) + if (node.msMatchesSelector && node.msMatchesSelector(selector)) + return node; + else if (node.matches && node.matches(selector)) + return node; + else + node = node.parentNode; + + return null; +} + function E() { var html = arguments[0], @@ -1541,7 +1560,7 @@ function E() if (attr) for (var key in attr) - if (attr.hasOwnProperty(key)) + if (attr.hasOwnProperty(key) && attr[key] !== null && attr[key] !== undefined) elem.setAttribute(key, attr[key]); if (typeof(data) === 'function') @@ -1818,18 +1837,6 @@ CBIDropdown = { document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) { s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {})); }); - }, - - findParent: function(node, selector) { - while (node) - if (node.msMatchesSelector && node.msMatchesSelector(selector)) - return node; - else if (node.matches && node.matches(selector)) - return node; - else - node = node.parentNode; - - return null; } }; @@ -1908,7 +1915,7 @@ function cbi_dropdown_init(sb) { sbox.openDropdown(this); } else { - var li = sbox.findParent(ev.target, 'li'); + var li = findParent(ev.target, 'li'); if (li && li.parentNode.classList.contains('dropdown')) sbox.toggleItem(this, li); } @@ -1933,7 +1940,7 @@ function cbi_dropdown_init(sb) { } else { - var active = sbox.findParent(document.activeElement, 'li'); + var active = findParent(document.activeElement, 'li'); switch (ev.keyCode) { case 27: @@ -1986,7 +1993,7 @@ function cbi_dropdown_init(sb) { if (!this.hasAttribute('open')) return; - var li = sbox.findParent(ev.target, 'li'); + var li = findParent(ev.target, 'li'); if (li) { if (li.parentNode.classList.contains('dropdown')) sbox.setFocus(this, li); @@ -2023,18 +2030,18 @@ function cbi_dropdown_init(sb) { }); create.addEventListener('focus', function(ev) { - var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]'); + var cbox = findParent(this, 'li').querySelector('input[type="checkbox"]'); if (cbox) cbox.checked = true; sb.setAttribute('locked-in', ''); }); create.addEventListener('blur', function(ev) { - var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]'); + var cbox = findParent(this, 'li').querySelector('input[type="checkbox"]'); if (cbox) cbox.checked = false; sb.removeAttribute('locked-in'); }); - var li = sbox.findParent(create, 'li'); + var li = findParent(create, 'li'); li.setAttribute('unselectable', ''); li.addEventListener('click', function(ev) { @@ -2044,3 +2051,77 @@ function cbi_dropdown_init(sb) { } cbi_dropdown_init.prototype = CBIDropdown; + +function cbi_update_table(table, data, placeholder) { + target = isElem(table) ? table : document.querySelector(table); + + if (!isElem(target)) + return; + + target.querySelectorAll('.tr.table-titles, .cbi-section-table-titles').forEach(function(thead) { + var titles = []; + + thead.querySelectorAll('.th').forEach(function(th) { + titles.push(th); + }); + + if (Array.isArray(data)) { + var n = 0, rows = target.querySelectorAll('.tr'); + + data.forEach(function(row) { + var trow = E('div', { 'class': 'tr' }); + + for (var i = 0; i < titles.length; i++) { + var text = titles[i].innerText; + var td = trow.appendChild(E('div', { + 'class': titles[i].className, + 'data-title': text ? text.trim() : null + }, row[i] || '')); + + td.classList.remove('th'); + td.classList.add('td'); + } + + trow.classList.add('cbi-rowstyle-%d'.format((n++ % 2) ? 2 : 1)); + + if (rows[n]) + target.replaceChild(trow, rows[n]); + else + target.appendChild(trow); + }); + + while (rows[++n]) + target.removeChild(rows[n]); + + if (placeholder && target.firstElementChild === target.lastElementChild) { + var trow = target.appendChild(E('div', { 'class': 'tr placeholder' })); + var td = trow.appendChild(E('div', { 'class': titles[0].className }, placeholder)); + + td.classList.remove('th'); + td.classList.add('td'); + } + } + else { + thead.parentNode.style.display = 'none'; + + thead.parentNode.querySelectorAll('.tr, .cbi-section-table-row').forEach(function(trow) { + if (trow !== thead) { + var n = 0; + trow.querySelectorAll('.th, .td').forEach(function(td) { + if (n < titles.length) { + var text = (titles[n++].innerText || '').trim(); + if (text !== '') + td.setAttribute('data-title', text); + } + }); + } + }); + + thead.parentNode.style.display = ''; + } + }); +} + +document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.table').forEach(cbi_update_table); +}); diff --git a/luci-base/htdocs/luci-static/resources/xhr.js b/luci-base/htdocs/luci-static/resources/xhr.js index de4476cdd..f1537a448 100644 --- a/luci-base/htdocs/luci-static/resources/xhr.js +++ b/luci-base/htdocs/luci-static/resources/xhr.js @@ -204,7 +204,6 @@ XHR.poll = function(interval, url, data, callback, post) }; XHR._q.push(e); - XHR.run(); return e; } @@ -260,3 +259,5 @@ XHR.running = function() { return !!(XHR._r && XHR._i); } + +document.addEventListener('DOMContentLoaded', XHR.run); diff --git a/luci-base/luasrc/dispatcher.lua b/luci-base/luasrc/dispatcher.lua index 6850d7e3a..6d5a8f4d3 100644 --- a/luci-base/luasrc/dispatcher.lua +++ b/luci-base/luasrc/dispatcher.lua @@ -703,15 +703,22 @@ function _create_node(path) local last = table.remove(path) local parent = _create_node(path) - c = {nodes={}, auto=true} - -- the node is "in request" if the request path matches - -- at least up to the length of the node path - if parent.inreq and context.path[#path+1] == last then - c.inreq = true + c = {nodes={}, auto=true, inreq=true} + + local _, n + for _, n in ipairs(path) do + if context.path[_] ~= n then + c.inreq = false + break + end end + + c.inreq = c.inreq and (context.path[#path + 1] == last) + parent.nodes[last] = c context.treecache[name] = c end + return c end diff --git a/luci-base/luasrc/tools/status.lua b/luci-base/luasrc/tools/status.lua index 06a9ad415..635995310 100644 --- a/luci-base/luasrc/tools/status.lua +++ b/luci-base/luasrc/tools/status.lua @@ -6,9 +6,25 @@ module("luci.tools.status", package.seeall) local uci = require "luci.model.uci".cursor() local ipc = require "luci.ip" +local function duid_to_mac(duid) + local b1, b2, b3, b4, b5, b6 + + -- DUID-LLT / Ethernet + if type(duid) == "string" and #duid == 28 then + b1, b2, b3, b4, b5, b6 = duid:match("^00010001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)%x%x%x%x%x%x%x%x$") + + -- DUID-LL / Ethernet + elseif type(duid) == "string" and #duid == 20 then + b1, b2, b3, b4, b5, b6 = duid:match("^00030001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$") + end + + return b1 and ipc.checkmac(table.concat({ b1, b2, b3, b4, b5, b6 }, ":")) +end + local function dhcp_leases_common(family) local rv = { } local nfs = require "nixio.fs" + local sys = require "luci.sys" local leasefile = "/tmp/dhcp.leases" uci:foreach("dhcp", "dnsmasq", @@ -87,6 +103,22 @@ local function dhcp_leases_common(family) fd:close() end + if family == 6 then + local _, lease + local hosts = sys.net.host_hints() + for _, lease in ipairs(rv) do + local mac = duid_to_mac(lease.duid) + local host = mac and hosts[mac] + if host then + if not lease.name then + lease.host_hint = host.name or host.ipv4 or host.ipv6 + elseif host.name and lease.hostname ~= host.name then + lease.host_hint = host.name + end + end + end + end + return rv end @@ -113,6 +145,11 @@ function wifi_networks() local net for _, net in ipairs(dev:get_wifinets()) do + local a, an = nil, 0 + for _, a in pairs(net:assoclist() or {}) do + an = an + 1 + end + rd.networks[#rd.networks+1] = { name = net:shortname(), link = net:adminlink(), @@ -128,10 +165,10 @@ function wifi_networks() noise = net:noise(), bitrate = net:bitrate(), ifname = net:ifname(), - assoclist = net:assoclist(), country = net:country(), txpower = net:txpower(), txpoweroff = net:txpower_offset(), + num_assoc = an, disabled = (dev:get("disabled") == "1" or net:get("disabled") == "1") } @@ -165,7 +202,6 @@ function wifi_network(id) noise = net:noise(), bitrate = net:bitrate(), ifname = net:ifname(), - assoclist = net:assoclist(), country = net:country(), txpower = net:txpower(), txpoweroff = net:txpower_offset(), @@ -182,6 +218,52 @@ function wifi_network(id) return { } end +function wifi_assoclist() + local sys = require "luci.sys" + local ntm = require "luci.model.network".init() + local hosts = sys.net.host_hints() + + local assoc = {} + local _, dev, net, bss + + for _, dev in ipairs(ntm:get_wifidevs()) do + local radioname = dev:get_i18n() + + for _, net in ipairs(dev:get_wifinets()) do + local netname = net:shortname() + local netlink = net:adminlink() + local ifname = net:ifname() + + for _, bss in pairs(net:assoclist() or {}) do + local host = hosts[_] + + bss.bssid = _ + bss.ifname = ifname + bss.radio = radioname + bss.name = netname + bss.link = netlink + + bss.host_name = (host) and (host.name or host.ipv4 or host.ipv6) + bss.host_hint = (host and host.name and (host.ipv4 or host.ipv6)) and (host.ipv4 or host.ipv6) + + assoc[#assoc+1] = bss + end + end + end + + table.sort(assoc, function(a, b) + if a.radio ~= b.radio then + return a.radio < b.radio + elseif a.ifname ~= b.ifname then + return a.ifname < b.ifname + else + return a.bssid < b.bssid + end + end) + + return assoc +end + function switch_status(devs) local dev local switches = { } diff --git a/luci-base/luasrc/view/cbi/apply_widget.htm b/luci-base/luasrc/view/cbi/apply_widget.htm index 702512f49..e3090da65 100644 --- a/luci-base/luasrc/view/cbi/apply_widget.htm +++ b/luci-base/luasrc/view/cbi/apply_widget.htm @@ -47,7 +47,7 @@ } - + -
-
-
-
-
- ? -
-
- <%:Collecting data...%> -
-
-
+ + + + <%:Collecting data...%> + + <%+cbi/valuefooter%> diff --git a/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm index 9005279a4..8fbbdc947 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -1,27 +1,11 @@ -
- <%:Active DHCP Leases%> -
-
-
<%:Hostname%>
-
<%:IPv4-Address%>
-
<%:MAC-Address%>
-
<%:Leasetime remaining%>
+
+

<%:Active DHCP Leases%>

+
+
+
<%:Hostname%>
+
<%:IPv4-Address%>
+
<%:MAC-Address%>
+
<%:Leasetime remaining%>
-
-

<%:Collecting data...%>
+
+
<%:Collecting data...%>
-
+
- +
diff --git a/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm index 96fbffdb0..68f0bbc9d 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm @@ -1,21 +1,39 @@ + +
+
+
<%:Network%>
+
<%:MAC-Address%>
+
<%:Host%>
+
<%:Signal%> / <%:Noise%>
+
<%:RX Rate%> / <%:TX Rate%>
+
+
+
<%:Collecting data...%>
+
+
diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index e9cfb3e85..9b93942c8 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -90,25 +90,43 @@

<%:Join Network: Wireless Scan%>

-
-
+
+
+
+
<%:Signal%>
+
<%:SSID%>
+
<%:Channel%>
+
<%:Mode%>
+
<%:BSSID%>
+
<%:Encryption%>
+
 
+
+ <% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %> -
-
+
+

<%=percent_wifi_signal(net)%>%
-
- <%=net.ssid and utl.pcdata(net.ssid) or "%s" % translate("hidden")%>
- Channel: <%=net.channel%> | - Mode: <%=net.mode%> | - BSSID: <%=net.bssid%> | - Encryption: <%=format_wifi_encryption(net.encryption)%> +
+ <%=net.ssid and utl.pcdata(net.ssid) or "%s" % translate("hidden")%>
-
+
+ <%=net.channel%> +
+
+ <%=net.mode%> +
+
+ <%=net.bssid%> +
+
+ <%=format_wifi_encryption(net.encryption)%> +
+
@@ -126,23 +144,23 @@ " /> - +
<% end %>
-
+
" method="get"> - +
- +
diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index d6140c81f..b9602785f 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -113,32 +113,10 @@ var is_reconnecting = false; - function nowrap(s) { - return s.replace(/ /g, ' '); - } - - function wifirate(bss, rx) { - var p = rx ? 'rx_' : 'tx_', - s = '%.1f <%:Mbit/s%>, %d<%:MHz%>' - .format(bss[p+'rate'] / 1000, bss[p+'mhz']), - ht = bss[p+'ht'], vht = bss[p+'vht'], - mhz = bss[p+'mhz'], nss = bss[p+'nss'], - mcs = bss[p+'mcs'], sgi = bss[p+'short_gi']; - - if (ht || vht) { - if (vht) s += ', VHT-MCS %d'.format(mcs); - if (nss) s += ', VHT-NSS %d'.format(nss); - if (ht) s += ', MCS %s'.format(mcs); - if (sgi) s += ', <%:Short GI%>'; - } - - return s; - } - function wifi_shutdown(id, toggle) { var reconnect = (toggle.getAttribute('active') == 'false'); - if (!reconnect && !confirm(String.format('<%:Really shut down network?\nYou might lose access to this device if you are connected via this interface.%>'))) + if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shut down network? You might lose access to this device if you are connected via this interface'))%>)) return; is_reconnecting = true; @@ -176,7 +154,7 @@ } function wifi_delete(id) { - if (!confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>')) + if (!confirm(<%=luci.http.write_json(translate('Really delete this wireless network? The deletion cannot be undone! You might lose access to this device if you are connected via this network.'))%>)) return; (new XHR()).post('<%=url('admin/network/wireless_delete')%>/' + id, { token: '<%=token%>' }, @@ -193,20 +171,25 @@ { if (st) { - var assoctable = document.getElementById('iw-assoclist'); - if (assoctable) - while (assoctable.firstElementChild !== assoctable.lastElementChild) - assoctable.removeChild(assoctable.lastElementChild); - - var devup = { }; var rowstyle = 1; + var radiostate = { }; + + st.forEach(function(s) { + var r = radiostate[wifidevs[s.id]] || (radiostate[wifidevs[s.id]] = {}); + + s.is_assoc = (s.bssid && s.bssid != '00:00:00:00:00:00' && s.channel && s.mode != 'Unknown' && !s.disabled); + + r.up = r.up || s.is_assoc; + r.channel = r.channel || s.channel; + r.bitrate = r.bitrate || s.bitrate; + r.frequency = r.frequency || s.frequency; + }); for( var i = 0; i < st.length; i++ ) { var iw = st[i]; - var is_assoc = (iw.bssid && iw.bssid != '00:00:00:00:00:00' && iw.channel && iw.mode != 'Unknown' && !iw.disabled); var p = iw.quality; - var q = is_assoc ? p : -1; + var q = iw.is_assoc ? p : -1; var icon; if (q < 0) @@ -222,9 +205,6 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - if (!devup[wifidevs[iw.id]]) - devup[wifidevs[iw.id]] = is_assoc; - var sig = document.getElementById(iw.id + '-iw-signal'); if (sig) sig.innerHTML = String.format( @@ -237,13 +217,13 @@ { if (!iw.disabled) { - toggle.className = 'cbi-button cbi-button-reset'; + toggle.className = 'cbi-button cbi-button-neutral'; toggle.value = '<%:Disable%>'; toggle.title = '<%:Shutdown this network%>'; } else { - toggle.className = 'cbi-button cbi-button-reload'; + toggle.className = 'cbi-button cbi-button-neutral'; toggle.value = '<%:Enable%>'; toggle.title = '<%:Activate this network%>'; } @@ -254,7 +234,7 @@ var info = document.getElementById(iw.id + '-iw-status'); if (info) { - if (is_assoc) + if (iw.is_assoc) info.innerHTML = String.format( '<%:SSID%>: %h | ' + '<%:Mode%>: %s
' + @@ -274,83 +254,23 @@ : '<%:Wireless is disabled or not associated%>' ); } - - var dev = document.getElementById(wifidevs[iw.id] + '-iw-devinfo'); - if (dev) - { - if (is_assoc) - dev.innerHTML = String.format( - '<%:Channel%>: %s (%s <%:GHz%>) | ' + - '<%:Bitrate%>: %s <%:Mbit/s%>', - iw.channel ? iw.channel : '?', - iw.frequency ? iw.frequency : '?', - iw.bitrate ? iw.bitrate : '?' - ); - else - dev.innerHTML = ''; - } - - if (assoctable) - { - var assoclist = [ ]; - for (var bssid in iw.assoclist) - { - assoclist.push(iw.assoclist[bssid]); - assoclist[assoclist.length-1].bssid = bssid; - } - - assoclist.sort(function(a, b) { a.bssid < b.bssid }); - - for (var j = 0; j < assoclist.length; j++) - { - var icon; - var q = (-1 * (assoclist[j].noise - assoclist[j].signal)) / 5; - if (q < 1) - icon = "<%=resource%>/icons/signal-0.png"; - else if (q < 2) - icon = "<%=resource%>/icons/signal-0-25.png"; - else if (q < 3) - icon = "<%=resource%>/icons/signal-25-50.png"; - else if (q < 4) - icon = "<%=resource%>/icons/signal-50-75.png"; - else - icon = "<%=resource%>/icons/signal-75-100.png"; - - var host = hosts[assoclist[j].bssid], - name = host ? (host.name || host.ipv4 || host.ipv6) : null, - hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; - - assoctable.appendChild(E('
'.format(rowstyle), [ - E('
%h
' - .format(iw.device.name, iw.ifname)), - E('
%h
' - .format(iw.ssid || '?')), - E('
%h
' - .format(assoclist[j].bssid)), - E('
', hint ? '
%h (%h)
' - .format(name || '?', hint) : (name || '?')), - E('
%d / %d <%:dBm%>
' - .format(assoclist[j].signal, assoclist[j].noise, assoclist[j].signal - assoclist[j].noise, icon, assoclist[j].signal, assoclist[j].noise)), - E('
', [ - E('', wifirate(assoclist[j], true)), - E('
'), - E('', wifirate(assoclist[j], false)) - ]) - ])); - - rowstyle = (rowstyle == 1) ? 2 : 1; - } - } } - if (assoctable && assoctable.firstElementChild === assoctable.lastElementChild) - assoctable.appendChild(E('

<%:No information available%>
')); - - for (var dev in devup) + for (var dev in radiostate) { var img = document.getElementById(dev + '-iw-upstate'); if (img) - img.src = '<%=resource%>/icons/wifi_big' + (devup[dev] ? '' : '_disabled') + '.png'; + img.src = '<%=resource%>/icons/wifi' + (radiostate[dev].up ? '' : '_disabled') + '.png'; + + var stat = document.getElementById(dev + '-iw-devinfo'); + if (stat) + stat.innerHTML = String.format( + '<%:Channel%>: %s (%s <%:GHz%>) | ' + + '<%:Bitrate%>: %s <%:Mbit/s%>', + radiostate[dev].channel ? radiostate[dev].channel : '?', + radiostate[dev].frequency ? radiostate[dev].frequency : '?', + radiostate[dev].bitrate ? radiostate[dev].bitrate : '?' + ); } } } @@ -359,37 +279,37 @@

<%:Wireless Overview%>

- +
-
+
<% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %> -
-
+
+
-
- +
+ <%=dev:name()%>
-
- <%=guess_wifi_hw(dev)%> (<%=dev:name()%>)
+
+ <%=guess_wifi_hw(dev)%>
-
+
- +
- +
@@ -398,22 +318,22 @@ <% if #nets > 0 then %> <% for i, net in ipairs(nets) do %> -
-
+
+
0%
-
+
<%:Collecting data...%>
-
- - - +
+ + +
<% end %> <% else %> -
+
<%:No network configured on this device%>
@@ -421,30 +341,14 @@ <% end %>
-
+
<% end %>

<%:Associated Stations%>

-
-
-
-
-
<%:SSID%>
-
<%:MAC-Address%>
-
<%:Host%>
-
<%:Signal%> / <%:Noise%>
-
<%:RX Rate%> / <%:TX Rate%>
-
-
-
- <%:Collecting data...%> -
-
-
-
+ <%+admin_network/wifi_assoclist%>
<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index 85468252e..ad20ea38f 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -24,21 +24,22 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - var s = document.getElementById('<%=self.option%>-iw-signal'); - if (s) - s.innerHTML = String.format( - '
' + - '%d%%', icon, iw.signal, iw.noise, p - ); + var s = document.getElementById('<%=self.option%>-iw-status'), + small = s.querySelector('small'), + info = s.querySelector('span'); - var d = document.getElementById('<%=self.option%>-iw-description'); - if (d && is_assoc) - d.innerHTML = String.format( + small.innerHTML = info.innerHTML = String.format( + ' 
%d%% ', + icon, iw.signal, iw.noise, p + ); + + if (is_assoc) + info.innerHTML = String.format( '<%:Mode%>: %s | ' + '<%:SSID%>: %h
' + - '<%:BSSID%>: %s | ' + + '<%:BSSID%>: %s
' + '<%:Encryption%>: %s
' + - '<%:Channel%>: %d (%.3f <%:GHz%>) | ' + + '<%:Channel%>: %d (%.3f <%:GHz%>)
' + '<%:Tx-Power%>: %d <%:dBm%>
' + '<%:Signal%>: %d <%:dBm%> | ' + '<%:Noise%>: %d <%:dBm%>
' + @@ -50,8 +51,8 @@ iw.txpower, iw.signal, iw.noise, iw.bitrate ? iw.bitrate : 0, iw.country ); - else if (d) - d.innerHTML = String.format( + else + info.innerHTML = String.format( '<%:SSID%>: %h | ' + '<%:Mode%>: %s
' + '<%:Wireless is disabled or not associated%>', @@ -62,17 +63,13 @@ ); //]]> -
-
-
-
-
- 0% -
-
- <%:Collecting data...%> -
-
-
+ + +   + + + <%:Collecting data...%> + + <%+cbi/valuefooter%> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index db1d0b888..ba0ab0f68 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -202,22 +202,23 @@ data_rx_peak = Math.max(data_rx_peak, data_rx[i]); data_tx_peak = Math.max(data_tx_peak, data_tx[i]); - if (i > 0) - { - data_rx_avg = (data_rx_avg + data_rx[i]) / 2; - data_tx_avg = (data_tx_avg + data_tx[i]) / 2; - } - else - { - data_rx_avg = data_rx[i]; - data_tx_avg = data_tx[i]; - } + data_rx_avg += data_rx[i]; + data_tx_avg += data_tx[i]; } + data_rx_avg = (data_rx_avg / Math.max(data_rx.length, 1)); + data_tx_avg = (data_tx_avg / Math.max(data_tx.length, 1)); + + var size = Math.floor(Math.log2(data_max)), + div = Math.pow(2, size - (size % 10)), + mult = data_max / div, + mult = (mult < 5) ? 2 : ((mult < 50) ? 10 : ((mult < 500) ? 100 : 1000)); + + data_max = data_max + (mult * div) - (data_max % (mult * div)); + /* remember current timestamp, calculate horizontal scale */ data_stamp = data[data.length-1][TIME]; - data_scale = height / (data_max * 1.1); - + data_scale = height / data_max; /* plot data */ var pt_rx = '0,' + height; @@ -244,9 +245,9 @@ line_rx.setAttribute('points', pt_rx); line_tx.setAttribute('points', pt_tx); - label_25.firstChild.data = bandwidth_label(1.1 * 0.25 * data_max); - label_50.firstChild.data = bandwidth_label(1.1 * 0.50 * data_max); - label_75.firstChild.data = bandwidth_label(1.1 * 0.75 * data_max); + label_25.firstChild.data = bandwidth_label(0.25 * data_max); + label_50.firstChild.data = bandwidth_label(0.50 * data_max); + label_75.firstChild.data = bandwidth_label(0.75 * data_max); label_rx_cur.innerHTML = bandwidth_label(data_rx[data_rx.length-1], true); label_tx_cur.innerHTML = bandwidth_label(data_tx[data_tx.length-1], true); @@ -258,6 +259,8 @@ label_tx_peak.innerHTML = bandwidth_label(data_tx_peak, true); } ); + + XHR.run(); } }, 1000 ); diff --git a/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/luci-mod-admin-full/luasrc/view/admin_status/connections.htm index 30d93f78b..ae8a6bb7c 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/connections.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -304,6 +304,8 @@ label_otr_peak.innerHTML = Math.floor(data_otr_peak); } ); + + XHR.run(); } }, 1000 ); diff --git a/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/luci-mod-admin-full/luasrc/view/admin_status/index.htm index ae6a10193..9d282f58b 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -54,8 +54,6 @@ swap = swapinfo, connmax = conn_max, conncount = conn_count, - leases = stat.dhcp_leases(), - leases6 = stat.dhcp6_leases(), wifinets = stat.wifi_networks() } @@ -111,11 +109,6 @@ luci.http.prepare_content("application/json") luci.http.write_json(rv) - return - elseif luci.http.formvalue("hosts") == "1" then - luci.http.prepare_content("application/json") - luci.http.write_json(luci.sys.net.host_hints()) - return end -%> @@ -131,7 +124,7 @@ var pc = Math.floor((100 / mn) * vn); return String.format( - '
' + + '
' + '
' + '
' + '%s / %s (%d%%)' + @@ -141,45 +134,6 @@ ); } - function wifirate(bss, rx) { - var p = rx ? 'rx_' : 'tx_', - s = '%.1f <%:Mbit/s%>, %d<%:MHz%>' - .format(bss[p+'rate'] / 1000, bss[p+'mhz']), - ht = bss[p+'ht'], vht = bss[p+'vht'], - mhz = bss[p+'mhz'], nss = bss[p+'nss'], - mcs = bss[p+'mcs'], sgi = bss[p+'short_gi']; - - if (ht || vht) { - if (vht) s += ', VHT-MCS %d'.format(mcs); - if (nss) s += ', VHT-NSS %d'.format(nss); - if (ht) s += ', MCS %s'.format(mcs); - if (sgi) s += ', <%:Short GI%>'; - } - - return s; - } - - function duid2mac(duid) { - // DUID-LLT / Ethernet - if (duid.length === 28 && duid.substr(0, 8) === '00010001') - return duid.substr(16).replace(/(..)(?=..)/g, '$1:').toUpperCase(); - - // DUID-LL / Ethernet - if (duid.length === 20 && duid.substr(0, 8) === '00030001') - return duid.substr(8).replace(/(..)(?=..)/g, '$1:').toUpperCase(); - - return null; - } - - var npoll = 1; - var hosts = <%=luci.http.write_json(luci.sys.net.host_hints())%>; - - function updateHosts() { - XHR.get('<%=REQUEST_URI%>', { hosts: 1 }, function(x, data) { - hosts = data; - }); - } - function labelList(items, offset) { var rv = [ ]; @@ -206,7 +160,7 @@ return E('div', { class: 'ifacebox' }, [ E('div', { class: 'ifacebox-head center ' + (active ? 'active' : '') }, E('strong', title)), - E('div', { class: 'ifacebox-body' }, childs) + E('div', { class: 'ifacebox-body left' }, childs) ]); } @@ -220,9 +174,6 @@ XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, function(x, info) { - if (!(npoll++ % 5)) - updateHosts(); - <% if has_mptcp == 0 then %> var us = document.getElementById('upstream_status_table'); @@ -333,86 +284,7 @@ ); <% end %> - <% if has_dhcp then %> - var ls = document.getElementById('lease_status_table'); - if (ls) - { - /* clear all rows */ - while (ls.firstElementChild !== ls.lastElementChild) - ls.removeChild(ls.lastElementChild); - - for (var i = 0; i < info.leases.length; i++) - { - var timestr; - - if (info.leases[i].expires === false) - timestr = '<%:unlimited%>'; - else if (info.leases[i].expires <= 0) - timestr = '<%:expired%>'; - else - timestr = String.format('%t', info.leases[i].expires); - - ls.appendChild(E('
'.format((i % 2) + 1), [ - E('
', info.leases[i].hostname ? info.leases[i].hostname : '?'), - E('
', info.leases[i].ipaddr), - E('
', info.leases[i].macaddr), - E('
', timestr) - ])); - } - - if (ls.firstElementChild === ls.lastElementChild) - ls.appendChild(E('

<%:There are no active leases.%>
')); - } - - var ls6 = document.getElementById('lease6_status_table'); - if (ls6 && info.leases6) - { - ls6.parentNode.style.display = 'block'; - - /* clear all rows */ - while (ls6.firstElementChild !== ls6.lastElementChild) - ls6.removeChild(ls6.lastElementChild); - - for (var i = 0; i < info.leases6.length; i++) - { - var timestr; - - if (info.leases6[i].expires === false) - timestr = '<%:unlimited%>'; - else if (info.leases6[i].expires <= 0) - timestr = '<%:expired%>'; - else - timestr = String.format('%t', info.leases6[i].expires); - - var host = hosts[duid2mac(info.leases6[i].duid)], - name = info.leases6[i].hostname, - hint = null; - - if (!name) { - if (host) - hint = host.name || host.ipv4 || host.ipv6; - } - else { - if (host && host.name && info.leases6[i].hostname != host.name) - hint = host.name; - } - - ls6.appendChild(E('
'.format((i % 2) + 1), [ - E('
', hint ? '
%h (%h)
'.format(name || '?', hint) : (name || '?')), - E('
', info.leases6[i].ip6addr), - E('
', info.leases6[i].duid), - E('
', timestr) - ])); - } - - if (ls6.firstElementChild === ls6.lastElementChild) - ls6.appendChild(E('

<%:There are no active leases.%>
')); - } - <% end %> - <% if has_wifi then %> - var assoclist = [ ]; - var ws = document.getElementById('wifi_status_table'); if (ws) { @@ -429,21 +301,6 @@ { var net = dev.networks[nidx]; var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel && !net.disabled); - var num_assoc = 0; - - for (var bssid in net.assoclist) - { - var bss = net.assoclist[bssid]; - - bss.bssid = bssid; - bss.link = net.link; - bss.name = net.name; - bss.ifname = net.ifname; - bss.radio = dev.name; - - assoclist.push(bss); - num_assoc++; - } var icon; if (!is_assoc) @@ -466,7 +323,7 @@ '<%:Mode%>', net.mode, '<%:BSSID%>', is_assoc ? (net.bssid || '-') : null, '<%:Encryption%>', is_assoc ? net.encryption : null, - '<%:Associations%>', is_assoc ? (num_assoc || '-') : null, + '<%:Associations%>', is_assoc ? (net.num_assoc || '-') : null, null, is_assoc ? null : E('em', '<%:Wireless is disabled or not associated%>'))); } @@ -481,62 +338,6 @@ if (!ws.lastElementChild) ws.appendChild(E('<%:No information available%>')); } - - var ac = document.getElementById('wifi_assoc_table'); - if (ac) - { - /* clear all rows */ - while (ac.firstElementChild !== ac.lastElementChild) - ac.removeChild(ac.lastElementChild); - - assoclist.sort(function(a, b) { - return (a.name == b.name) - ? (a.bssid < b.bssid) - : (a.name > b.name ) - ; - }); - - for (var i = 0; i < assoclist.length; i++) - { - var icon; - var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; - if (q < 1) - icon = "<%=resource%>/icons/signal-0.png"; - else if (q < 2) - icon = "<%=resource%>/icons/signal-0-25.png"; - else if (q < 3) - icon = "<%=resource%>/icons/signal-25-50.png"; - else if (q < 4) - icon = "<%=resource%>/icons/signal-50-75.png"; - else - icon = "<%=resource%>/icons/signal-75-100.png"; - - var host = hosts[assoclist[i].bssid], - name = host ? (host.name || host.ipv4 || host.ipv6) : null, - hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; - - ac.appendChild(E('
'.format(1 + (i % 2)), [ - E('
%h
' - .format(assoclist[i].radio, assoclist[i].ifname)), - E('' - .format(assoclist[i].link, assoclist[i].name)), - E('
', - assoclist[i].bssid), - E('
', - hint ? '
%h (%h)
'.format(name || '?', hint) : (name || '?')), - E('
%d / %d <%:dBm%>
' - .format(assoclist[i].signal, assoclist[i].noise, assoclist[i].signal - assoclist[i].noise, icon, assoclist[i].signal, assoclist[i].noise)), - E('
', [ - E('', wifirate(assoclist[i], true)), - E('
'), - E('', wifirate(assoclist[i], false)) - ]) - ])); - } - - if (ac.firstElementChild === ac.lastElementChild) - ac.appendChild(E('

<%:No information available%>
')); - } <% end %> var e; @@ -594,8 +395,8 @@

<%:Status%>

-
- <%:System%> +
+

<%:System%>

<%:Hostname%>
<%=luci.sys.hostname() or "?"%>
@@ -610,79 +411,51 @@
<%:Uptime%>
-
<%:Load Average%>
-
-
+
-
- <%:Memory%> +
+

<%:Memory%>

<%:Total Available%>
-
<%:Free%>
-
<%:Buffered%>
-
-
+
<% if swapinfo.total > 0 then %> -
- <%:Swap%> +
+

<%:Swap%>

<%:Total Available%>
-
<%:Free%>
-
-
+
<% end %> -
- <%:Network%> - <% if has_mptcp == "0" then %> +
+

<%:Network%>

+
<%:Collecting data...%>
- <% end %>
<%:Active Connections%>
-
-
+
-<% if has_dhcp then %> -
- <%:DHCP Leases%> - -
-
-
<%:Hostname%>
-
<%:IPv4-Address%>
-
<%:MAC-Address%>
-
<%:Leasetime remaining%>
-
-
-

<%:Collecting data...%>
-
-
-
- - -<% end %> +<% + if has_dhcp then + include("admin_network/lease_status") + end +%> <% if has_dsl then %> -
- <%:DSL%> +
+

<%:DSL%>

+
<%:DSL Status%>
@@ -696,35 +469,23 @@
-
+
<% end %> <% if has_wifi then %> -
- <%:Wireless%> +
+

<%:Wireless%>

<%:Collecting data...%>
-
+
-
- <%:Associated Stations%> +
+

<%:Associated Stations%>

-
-
-
 
-
<%:Network%>
-
<%:MAC-Address%>
-
<%:Host%>
-
<%:Signal%> / <%:Noise%>
-
<%:RX Rate%> / <%:TX Rate%>
-
-
-

<%:Collecting data...%>
-
-
-
+ <%+admin_network/wifi_assoclist%> +
<% end %> <%- diff --git a/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm index ced4d5f77..5d544ca60 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -62,6 +62,7 @@ <%+header%> +

<%:Firewall Status%>

-
<% if has_ip6tables then %>
    @@ -88,69 +88,69 @@ -
    +
    <% for _, tbl in ipairs(tables) do chaincnt = 0 %>

    <%:Table%>: <%=tbl%>

    -
    - <% for _, chain in ipairs(ipt:chains(tbl)) do - rowcnt = 0 - chaincnt = chaincnt + 1 - chaininfo = ipt:chain(tbl, chain) - %> -
    -
    -
    - <%:Chain%> <%=chain%> - (<%- if chaininfo.policy then -%> - <%:Policy%>: <%=chaininfo.policy%>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> - <%- else -%> - <%:References%>: <%=chaininfo.references-%> - <%- end -%>) -
    -
    -
    -
    <%:Pkts.%>
    -
    <%:Traffic%>
    -
    <%:Target%>
    -
    <%:Prot.%>
    -
    <%:In%>
    -
    <%:Out%>
    -
    <%:Source%>
    -
    <%:Destination%>
    -
    <%:Options%>
    -
    - <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> -
    -
    <%=rule.packets%>
    -
    <%=wba.byte_format(rule.bytes)%>
    -
    <%=rule.target and link_target(tbl, rule.target) or "-"%>
    -
    <%=rule.protocol%>
    -
    <%=link_iface(rule.inputif)%>
    -
    <%=link_iface(rule.outputif)%>
    -
    <%=rule.source%>
    -
    <%=rule.destination%>
    -
    <%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%>
    -
    - <% end %> + <% for _, chain in ipairs(ipt:chains(tbl)) do + rowcnt = 0 + chaincnt = chaincnt + 1 + chaininfo = ipt:chain(tbl, chain) + %> +

    + <%:Chain%> <%=chain%> + (<%- if chaininfo.policy then -%> + <%:Policy%>: <%=chaininfo.policy%>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> + <%- else -%> + <%:References%>: <%=chaininfo.references-%> + <%- end -%>) +

    - <% if rowcnt == 1 then %> -
    -
    <%:No rules in this chain%>
    +
    +
    +
    +
    <%:Pkts.%>
    +
    <%:Traffic%>
    +
    <%:Target%>
    +
    <%:Prot.%>
    +
    <%:In%>
    +
    <%:Out%>
    +
    <%:Source%>
    +
    <%:Destination%>
    +
    <%:Options%>
    - <% end %> - <% end %> - <% if chaincnt == 0 then %> -
    -
    <%:No chains in this table%>
    + <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> +
    +
    <%=rule.packets%>
    +
    <%=wba.byte_format(rule.bytes)%>
    +
    <%=rule.target and link_target(tbl, rule.target) or "-"%>
    +
    <%=rule.protocol%>
    +
    <%=link_iface(rule.inputif)%>
    +
    <%=link_iface(rule.outputif)%>
    +
    <%=rule.source%>
    +
    <%=rule.destination%>
    +
    <%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%>
    +
    + <% end %> + + <% if rowcnt == 1 then %> +
    +
    <%:No rules in this chain%>
    +
    + <% end %>
    - <% end %> -
    +
    + <% end %> + + <% if chaincnt == 0 then %> + <%:No chains in this table%> + <% end %> +

    <% end %> -
    +
<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/luci-mod-admin-full/luasrc/view/admin_status/load.htm index c8ada7156..dc7d927de 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/load.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -237,6 +237,8 @@ label_15_peak.innerHTML = (data_15_peak / 100).toFixed(2); } ); + + XHR.run(); } }, 1000 ); diff --git a/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/luci-mod-admin-full/luasrc/view/admin_status/routes.htm index af8037135..9ed37939f 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/routes.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -32,28 +32,30 @@ <%+header%> + +

<%:Routes%>

<%:The following rules are currently active on this system.%>
-
+
ARP
-
-
-
<%_IPv4-Address%>
-
<%_MAC-Address%>
-
<%:Interface%>
+
+
+
<%_IPv4-Address%>
+
<%_MAC-Address%>
+
<%:Interface%>
<% for _, v in ipairs(ip.neighbors({ family = 4 })) do if v.mac then %> -
-
<%=v.dest%>
-
<%=v.mac%>
-
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
+
<%=v.dest%>
+
<%=v.mac%>
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
<% style = not style @@ -62,61 +64,57 @@ %>
-
-
+
-
+
<%_Active IPv4-Routes%> -
-
-
-
<%:Network%>
-
<%:Target%>
-
<%_IPv4-Gateway%>
-
<%:Metric%>
-
<%:Table%>
+
+
+
<%:Network%>
+
<%:Target%>
+
<%_IPv4-Gateway%>
+
<%:Metric%>
+
<%:Table%>
<% for _, v in ipairs(ip.routes({ family = 4, type = 1 })) do %> -
-
<%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%>
-
<%=v.dest%>
-
<%=v.gw%>
-
<%=v.metric or 0%>
-
<%=rtn[v.table] or v.table%>
+
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%>
+
<%=v.dest%>
+
<%=v.gw or "-"%>
+
<%=v.metric or 0%>
+
<%=rtn[v.table] or v.table%>
<% style = not style end %>
-
-
+
<% if nixio.fs.access("/proc/net/ipv6_route") then style = true %> -
+
<%_Active IPv6-Routes%> -
-
-
-
<%:Network%>
-
<%:Target%>
-
<%:Source%>
-
<%:Metric%>
-
<%:Table%>
+
+
+
<%:Network%>
+
<%:Target%>
+
<%:Source%>
+
<%:Metric%>
+
<%:Table%>
<% for _, v in ipairs(ip.routes({ family = 6, type = 1 })) do if v.dest and not v.dest:is6linklocal() then %> -
-
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
-
<%=v.dest%>
-
<%=v.from%>
-
<%=v.metric or 0%>
-
<%=rtn[v.table] or v.table%>
+
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
<%=v.dest%>
+
<%=v.from%>
+
<%=v.metric or 0%>
+
<%=rtn[v.table] or v.table%>
<% style = not style @@ -125,27 +123,25 @@ %>
-
-
+
-
+
<%:IPv6 Neighbours%> -
-
-
-
<%:IPv6-Address%>
-
<%:MAC-Address%>
-
<%:Interface%>
+
+
+
<%:IPv6-Address%>
+
<%:MAC-Address%>
+
<%:Interface%>
<% for _, v in ipairs(ip.neighbors({ family = 6 })) do if v.dest and not v.dest:is6linklocal() and v.mac then %> -
-
<%=v.dest%>
-
<%=v.mac%>
-
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
+
<%=v.dest%>
+
<%=v.mac%>
+
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
<% style = not style @@ -154,8 +150,7 @@ %>
-
-
+
<% end %>
diff --git a/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm index 4211b2647..1806f4a6c 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -276,7 +276,7 @@ function wireless_label(dbm, noise) { if (noise) - return String.format("%d <%:dBm%> (SNR %d <%:dBm%>)", noise_floor + dbm - 255, dbm - noise); + return String.format("%d <%:dBm%> (SNR %d <%:dB%>)", noise_floor + dbm - 255, dbm - noise); else return String.format("%d <%:dBm%>", noise_floor + dbm - 255); } @@ -308,6 +308,8 @@ label_rate_peak.innerHTML = rate_label(data_rate_peak); } ); + + XHR.run(); } }, 1000 ); diff --git a/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm b/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm index b32ef7826..0a4bc6578 100644 --- a/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm +++ b/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm @@ -13,84 +13,77 @@
  • <%:Configuration%>
  • -
    - -
    - <%:Backup / Restore%> -
    <%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%>
    -
    -
    - -
    - -
    - -
    +
    +

    <%:Backup / Restore%>

    +
    <%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%>
    +
    + + +
    + +
    +
    - - <% if reset_avail then %> -
    - -
    - -
    - -
    -
    -
    - <% end %> -
    -
    -
    <%:To restore configuration files, you can upload a previously generated backup archive here.%>
    -
    -
    -
    - -
    - - - -
    -
    -
    -
    +
    + <% if reset_avail then %> -
    <%:Custom files (certificates, scripts) may remain on the system. To prevent this, perform a factory-reset first.%>
    +
    + +
    + +
    + +
    +
    +
    <% end %> -
    +
    +
    <%:To restore configuration files, you can upload a previously generated backup archive here.%>
    +
    +
    +
    + +
    + + + +
    +
    +
    +
    + <% if reset_avail then %> +
    <%:Custom files (certificates, scripts) may remain on the system. To prevent this, perform a factory-reset first.%>
    + <% end %> +
    -
    - -
    - <%:Flash new firmware image%> - <% if upgrade_avail then %> -
    - -
    <%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires a compatible firmware image).%>
    -
    -
    - -
    - -
    -
    -
    - -
    - - -
    +
    +

    <%:Flash new firmware image%>

    + <% if upgrade_avail then %> + + +
    <%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires a compatible firmware image).%>
    +
    +
    + +
    +
    - <% if image_invalid then %> -
    <%:The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. %>
    - <% end %> - - <% else %> -
    <%:Sorry, there is no sysupgrade support present; a new firmware image must be flashed manually. Please refer to the wiki for device specific install instructions.%>
    - <% end %> -
    - - +
    + +
    + + +
    +
    +
    + <% if image_invalid then %> +
    <%:The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. %>
    + <% end %> + + <% else %> +
    <%:Sorry, there is no sysupgrade support present; a new firmware image must be flashed manually. Please refer to the wiki for device specific install instructions.%>
    + <% end %> +
    <%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index 4944a232b..ef13a9167 100644 --- a/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -44,6 +44,8 @@ end <%+header%> + +

    <%:Software%>

    @@ -57,8 +59,8 @@ end -
    -
    +
    +
    <% if (install and next(install)) or (remove and next(remove)) or update or upgrade then %>
    <% if #stdout > 0 then %>
    <%=pcdata(stdout)%>
    <% end %> @@ -91,18 +93,18 @@ end
     
    -
    +

    -
    +
    - +
    @@ -110,11 +112,11 @@ end
    - +
    -
    - +
    +
    @@ -122,90 +124,90 @@ end <% if display ~= "available" then %> -
    -
    -
    -
     
    -
    <%:Package name%>
    -
    <%:Version%>
    -
    - <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> -
    -
    -
    - - - - <%:Remove%> -
    +
    +
    +
    +
    +
    <%:Package name%>
    +
    <%:Version%>
    +
     
    -
    <%=luci.util.pcdata(n)%>
    -
    <%=luci.util.pcdata(v)%>
    + <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> +
    +
    <%=luci.util.pcdata(n)%>
    +
    <%=luci.util.pcdata(v)%>
    +
    +
    + + + + +
    +
    +
    + <% end) %> + <% if empty then %> +
    +
     
    +
    <%:none%>
    +
    <%:none%>
    +
    + <% end %>
    - <% end) %> - <% if empty then %> -
    -
     
    -
    <%:none%>
    -
    <%:none%>
    -
    - <% end %>
    -
    +
    <% else %> -
    +
    <% if not querypat then %> -
      + -
      <% end %> -
      -
      -
       
      -
      <%:Package name%>
      -
      <%:Version%>
      -
      <%:Size (.ipk)%>
      -
      <%:Description%>
      -
      - <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> -
      -
      -
      - - - - <%:Install%> -
      +
      +
      +
      +
      <%:Package name%>
      +
      <%:Version%>
      +
      <%:Size (.ipk)%>
      +
      <%:Description%>
      +
       
      -
      <%=luci.util.pcdata(n)%>
      -
      <%=luci.util.pcdata(v)%>
      -
      <%=luci.util.pcdata(s)%>
      -
      <%=luci.util.pcdata(d)%>
      + <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> +
      +
      <%=luci.util.pcdata(n)%>
      +
      <%=luci.util.pcdata(v)%>
      +
      <%=luci.util.pcdata(s)%>
      +
      <%=luci.util.pcdata(d)%>
      +
      +
      + + + + +
      +
      +
      + <% end) %> + <% if empty then %> +
      +
       
      +
      <%:none%>
      +
      <%:none%>
      +
      <%:none%>
      +
      <%:none%>
      +
      + <% end %>
      - <% end) %> - <% if empty then %> -
      -
       
      -
      <%:none%>
      -
      <%:none%>
      -
      <%:none%>
      -
      <%:none%>
      -
      - <% end %>
      - <% if not querypat then %> -
      - <% end %> -
    +
    <% end %>
    diff --git a/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm b/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm index c9551804d..6ec2b310d 100644 --- a/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm +++ b/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm @@ -7,7 +7,6 @@ <%+header%>

    <%:Reboot%>

    -

    <%:Reboots the operating system of your device%>

    @@ -49,7 +48,7 @@ } //]]> - +
    +
    <%:Legend:%>
      <%:Section added%>
    @@ -32,9 +32,11 @@ ret[#ret+1] = "
    %s.%s.%s+=%s" %{ r, s, o, util.pcdata(v[i]) } end - else + elseif v ~= "" then ret[#ret+1] = "
    %s.%s.%s=%s" %{ r, s, o, util.pcdata(v) } + else + ret[#ret+1] = "
    %s.%s.%s" %{ r, s, o } end end end @@ -57,7 +59,7 @@ ret[#ret+1] = "%s.%s.%s+=%s
    " %{ r, s, o, util.pcdata(v[i]) } end - + else ret[#ret+1] = "%s.%s.%s=%s
    " %{ r, s, o, util.pcdata(v) } @@ -75,5 +77,5 @@ write(table.concat(ret)) %>
    -
    +
    <%- end) %> diff --git a/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index c69ec1215..628224475 100644 --- a/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -27,21 +27,17 @@
    <% if redir_url then %> -
    -
    - -
    -
    +
    + +
    <% end %> -
    - -
    "> - - " /> - -
    -
    + +
    "> + + " /> + +
    <%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm index dff53420a..ff23d568d 100644 --- a/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm +++ b/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -27,7 +27,7 @@ diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css index 5771a94aa..9fe28f463 100644 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css @@ -215,7 +215,8 @@ a:hover { * ---------------------------------------------------------------------------------------- */ p, .cbi-map-descr, -.cbi-section-descr { +.cbi-section-descr, +.table .tr.cbi-section-table-descr .th { font-size: 13px; font-weight: normal; line-height: 18px; @@ -229,7 +230,7 @@ p small { h1, h2, -h3, +h3, legend, h4, h5, h6 { @@ -265,14 +266,14 @@ h2 small { font-size: 14px; } -h3, +h3, legend, h4, h5, h6 { line-height: 36px; } -h3 { +h3, legend { font-size: 18px; } @@ -543,6 +544,13 @@ textarea { height: auto; } +.td > input[type=text], +.td > input[type=password], +.td > select, +.td > .cbi-dropdown { + width: 100%; +} + .uneditable-input { background-color: #ffffff; display: block; @@ -645,6 +653,26 @@ textarea[readonly] { border-color: #ddd; } +.cbi-optionals, +.cbi-section-create { + padding: 0 0 10px 10px; +} + +.cbi-section-create { + margin: -3px; + display: inline-flex; + align-items: center; +} + +.cbi-section-create > * { + margin: 3px; + flex: 1 1 auto; +} + +.cbi-section-create > * > input { + width: 100%; +} + .actions, .cbi-page-actions { background: #f5f5f5; @@ -706,6 +734,7 @@ textarea[readonly] { padding: 0; font-size: 13px; border-collapse: collapse; + position: relative; } .table .th, .table .td { @@ -765,6 +794,19 @@ table tbody th { vertical-align: top; } +.tr.placeholder { + height: calc(3em + 20px); +} + +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + line-height: 3em; +} + /* Patterns.less * Repeatable UI elements outside the base styles provided from the scaffolding * ---------------------------------------------------------------------------- */ @@ -1277,99 +1319,67 @@ footer { outline: 1px dotted #666; } -.btn.primary, -.cbi-page-actions .cbi-button-apply, -.cbi-page-actions .cbi-button-save, -.cbi-page-actions .cbi-button-reset { - color: #ffffff; - padding: 5px 14px 6px; - background-color: #0064cd; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #049cdb, #0064cd); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #0064cd #0064cd #003f81; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - .cbi-input-invalid, .cbi-value-error input { color: #FF0000; border-color: #FF0000; } -.cbi-button-up, -.cbi-input-up { - background-position: center center; - background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-down, -.cbi-input-down { - background-position: center center; - background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-find, -.cbi-input-find { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - +.cbi-button-positive, +.cbi-button-fieldadd, .cbi-button-add, -.cbi-input-add { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-apply, -.cbi-input-apply { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-reset, -.cbi-input-reset { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-edit, -.cbi-input-edit { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-remove, -.cbi-input-remove { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-reload, -.cbi-input-reload { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-link, -.cbi-input-link { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-save { + border-color: #4a4; + color: #4a4; } +.cbi-button-neutral, .cbi-button-download, -.cbi-input-download { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-find, +.cbi-button-link, +.cbi-button-up, +.cbi-button-down { + border-color: #444; + color: #444; +} + +.btn.primary, +.cbi-button-action, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-edit { + border-color: #0069d6; + color: #0069d6; +} + +.cbi-button-negative, +.cbi-section-remove .cbi-button, +.cbi-button-reset, +.cbi-button-remove { + border-color: #c44; + color: #c44; +} + +.btn.primary, +.cbi-button-action.important, +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit { + color: #fff; + background: #0069d6; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.cbi-button-positive.important, +.cbi-page-actions .cbi-button-save { + color: #fff; + background: #4a4; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.cbi-page-actions .cbi-button-apply + .cbi-button-save { + background: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.75); + color: #4a4; } .cbi-dropdown { @@ -1525,6 +1535,58 @@ footer { opacity: .6; } +.cbi-tooltip-container { + cursor: help; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; +} + +.cbi-tooltip-container:hover .cbi-tooltip:not(:empty) { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: 1px; + background: inherit; + margin: -1.6em 0 0 -5px; + border-radius: 3px; + pointer-events: none; + box-shadow: 0 0 3px #444; +} + +.zonebadge .cbi-tooltip > * { + margin: 1px; +} + +.zone-forwards { + display: flex; + flex-wrap: wrap; +} + +.zone-forwards > * { + flex: 1 1 40%; + padding: 1px; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + .btn.active, .btn:active { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } @@ -1555,46 +1617,6 @@ footer { font-size: 11px; } -/* Button icons for specific pages */ -.Startup .cbi-section-table input.cbi-input-apply, -.Startup .cbi-section-table input.cbi-button-apply { - background-image: url("../resources/cbi/apply.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-reload, -.Startup .cbi-section-table input.cbi-input-reload { - background-image: url("../resources/cbi/reload.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-remove, -.Processes .cbi-section-table div.cbi-section-remove input, -.Startup .cbi-section-table input.cbi-input-remove, -.Startup .cbi-section-table div.cbi-section-remove input { - background-image: url("../resources/cbi/remove.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-reset, -.Processes .cbi-section-table input.cbi-button-reset, -.Startup .cbi-section-table input.cbi-input-reset, -.Startup .cbi-section-table input.cbi-button-reset { - background-image: url("../resources/cbi/reset.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Startup .cbi-section-table input.cbi-input-save, -.Startup .cbi-section-table input.cbi-button-save { - background-image: url("../resources/cbi/save.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { padding: 0; border: 0; @@ -1746,6 +1768,20 @@ header .pull-right { padding-top: 8px; } font-weight: normal; } +.cbi-section-table-titles.named::before, +.cbi-section-table-descr.named::before, +.cbi-section-table-row[data-title]::before { + content: attr(data-title) " "; + display: table-cell; + padding: 10px 10px 9px; + line-height: 18px; + font-weight: bold; +} + +.cbi-section-table-row[data-title]::before { + border-top: 1px solid #ddd; +} + .left { text-align: left !important; } .right { text-align: right !important; } @@ -1784,9 +1820,13 @@ table table td, vertical-align: middle; } -.cbi-value-description { display: inline; } - -.cbi-value-description img { vertical-align: middle; } +.cbi-value-description { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: .25em .2em; + background-repeat: no-repeat; + margin: .25em 0 0 0; + padding: 0 0 0 1.7em; +} .cbi-section-error { border: 1px solid #FF0000; @@ -1885,6 +1925,7 @@ table table td, flex-wrap: wrap; } +.ifacebadge.large, .network-status-table .ifacebox-body .ifacebadge { flex: 1; margin: .5em .25em 0 .25em; @@ -1899,7 +1940,6 @@ table table td, white-space: nowrap; color: #666666; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - cursor: pointer; } .zonebadge > em, From 23fc4cd913392603139fdafa382aeca361efdbf9 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 3 Jul 2018 16:09:06 +0200 Subject: [PATCH 201/307] Fix index --- .../view/admin_network/diagnostics.htm.rej | 61 ------------------- .../luasrc/view/admin_status/index.htm | 4 +- 2 files changed, 2 insertions(+), 63 deletions(-) delete mode 100644 luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm.rej diff --git a/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm.rej b/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm.rej deleted file mode 100644 index 9c1d86837..000000000 --- a/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm.rej +++ /dev/null @@ -1,61 +0,0 @@ ---- luasrc/view/admin_network/diagnostics.htm 2018-07-03 15:17:57.633203371 +0200 -+++ luasrc/view/admin_network/diagnostics.htm 2018-06-08 10:45:56.107723557 +0200 -@@ -72,7 +78,7 @@ - -
    - --
    -+
    -
    - <% if has_ping6 then %> -
    - <% if has_traceroute6 then %> -
    - -
    - -+ <% if has_speedtest and false then %> -+
    -+
    -+ -+
    -+ <% end %> -+ -+ <% if has_iperf3 then %> -+
    -+
    -+ -+
    -+ <% end %> -+ -+ <% if has_curl then %> -+
    -+
    -+ -+
    -+ <% end %> -+ -+ <% if has_netstat then %> -+
    -+
    -+ -+
    -+ <% end %> -+ -

    - - diff --git a/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/luci-mod-admin-full/luasrc/view/admin_status/index.htm index 9d282f58b..900732fee 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -436,11 +436,11 @@

    <%:Network%>

    - + <% if has_mptcp == 0 then %>
    <%:Collecting data...%>
    - + <% end %>
    <%:Active Connections%>
    -
    From 7ba5946e5cbcb6116f2ff09bd705ac9fc0781720 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 3 Jul 2018 17:26:10 +0200 Subject: [PATCH 202/307] Fix diagnostics --- luci-mod-admin-full/luasrc/controller/admin/network.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-mod-admin-full/luasrc/controller/admin/network.lua b/luci-mod-admin-full/luasrc/controller/admin/network.lua index 2dc9fe9b2..80b85b7e1 100644 --- a/luci-mod-admin-full/luasrc/controller/admin/network.lua +++ b/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -416,7 +416,7 @@ function diag_command(cmd, addr) if addr and addr:match("^[a-zA-Z0-9%-%.:_]+$") then luci.http.prepare_content("text/plain") - local util = io.popen(cmd % luci.util.shellquote(addr)) + local util = io.popen(cmd % addr) if util then while true do local ln = util:read("*l") From 06a8bab431eb288a80f6b7a2cc0d9757409640c7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 4 Jul 2018 15:42:50 +0200 Subject: [PATCH 203/307] Fix MPTCP graphs --- .../luasrc/view/mptcp/multipath.htm | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm index 467c81061..27be51b1c 100644 --- a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm +++ b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm @@ -399,16 +399,11 @@ data_tx_peak = Math.max(data_tx_peak, updata[itf][i]); data_max_upl = Math.max(data_max_upl, uplineUpl[itf][i]); - if (i > 0) - { - data_rx_avg = (data_rx_avg + dndata[itf][i]) / 2; - data_tx_avg = (data_tx_avg + updata[itf][i]) / 2; - } - else - { - data_rx_avg = dndata[itf][i]; - data_tx_avg = updata[itf][i]; - } + data_rx_avg += dndata[itf][i]; + data_tx_avg += updata[itf][i]; + + data_rx_avg = (data_rx_avg / Math.max(dndata[itf].length, 1)); + data_tx_avg = (data_tx_avg / Math.max(updata[itf].length, 1)); if(toadditf.length) { @@ -516,6 +511,7 @@ } } ); + XHR.run(); } }, 1000 <% else %> @@ -699,21 +695,22 @@ data_rx_peak = Math.max(data_rx_peak, data_rx[i]); data_tx_peak = Math.max(data_tx_peak, data_tx[i]); - if (i > 0) - { - data_rx_avg = (data_rx_avg + data_rx[i]) / 2; - data_tx_avg = (data_tx_avg + data_tx[i]) / 2; - } - else - { - data_rx_avg = data_rx[i]; - data_tx_avg = data_tx[i]; - } + data_rx_avg += data_rx[i]; + data_tx_avg += data_tx[i]; } + data_rx_avg = (data_rx_avg / Math.max(data_rx.length, 1)); + data_tx_avg = (data_tx_avg / Math.max(data_tx.length, 1)); + + var size = Math.floor(Math.log2(data_max)), + div = Math.pow(2, size - (size % 10)), + mult = data_max / div, + mult = (mult < 5) ? 2 : ((mult < 50) ? 10 : ((mult < 500) ? 100 : 1000)); + + data_max = data_max + (mult * div) - (data_max % (mult * div)); /* remember current timestamp, calculate horizontal scale */ data_stamp = data[data.length-1][TIME]; - data_scale = height / (data_max * 1.1); + data_scale = height / data_max; /* plot data */ @@ -741,9 +738,9 @@ line_rx.setAttribute('points', pt_rx); line_tx.setAttribute('points', pt_tx); - label_25.firstChild.data = bandwidth_label(1.1 * 0.25 * data_max); - label_50.firstChild.data = bandwidth_label(1.1 * 0.50 * data_max); - label_75.firstChild.data = bandwidth_label(1.1 * 0.75 * data_max); + label_25.firstChild.data = bandwidth_label(0.25 * data_max); + label_50.firstChild.data = bandwidth_label(0.50 * data_max); + label_75.firstChild.data = bandwidth_label(0.75 * data_max); label_rx_cur.innerHTML = bandwidth_label(data_rx[data_rx.length-1], true); label_tx_cur.innerHTML = bandwidth_label(data_tx[data_tx.length-1], true); @@ -755,6 +752,7 @@ label_tx_peak.innerHTML = bandwidth_label(data_tx_peak, true); } ); + XHR.run(); } }, 1000 <% end %> From 6aa1b13111fd26cf09736f04a7b787ca6aa87401 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 5 Jul 2018 10:44:47 +0200 Subject: [PATCH 204/307] Fix add interface --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index def7bc26a..439cf2fd0 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -33,7 +33,7 @@ function wizard_add() multipath_master = true end end) - local defif = ucic:get("network","wan1","ifname") or "eth0" + local defif = ucic:get("network","wan1_dev","ifname") or "eth0" ucic:set("network","wan" .. i,"interface") ucic:set("network","wan" .. i,"ifname",defif) ucic:set("network","wan" .. i,"proto","static") @@ -49,6 +49,7 @@ function wizard_add() ucic:commit("network") -- Dirty way to add new interface to firewall... luci.sys.call("uci -q add_list firewall.@zone[1].network=wan" .. i) + luci.sys.call("uci -q commit firewall") luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") gostatus = false From b830b945777cb0f3a97e6c63bf97c1f0db183a3a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 5 Jul 2018 15:28:44 +0200 Subject: [PATCH 205/307] Delete default wifi --- openmptcprouter/files/etc/uci-defaults/2030-omr-wifi | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100755 openmptcprouter/files/etc/uci-defaults/2030-omr-wifi diff --git a/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi b/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi new file mode 100755 index 000000000..7ab4854af --- /dev/null +++ b/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi @@ -0,0 +1,10 @@ +#!/bin/sh + +uci -q show wireless.default_radio0 && { + uci -q batch <<-EOF >/dev/null + delete wireless.default_radio0 + commit wireless + EOF +} + +exit 0 From 173a34f70dd0756459249aa3db77fcdc5561012a Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 5 Jul 2018 15:29:16 +0200 Subject: [PATCH 206/307] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5328202d6..d1aafa57d 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ This is used to check if there is no other IPv6 route announced on the network ## mlvpn -*Source:* [https://github.com/zehome/MLVPN](https://github.com/zehome/MLVPN) +*Source:* [https://github.com/markfoodyburton/MLVPN/tree/new-reorder](https://github.com/markfoodyburton/MLVPN/tree/new-reorder) *Description:* Multi-link VPN From db7d8bd7f85bddf7272da3e3a8fa471ea8dc53f2 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 5 Jul 2018 18:15:50 +0200 Subject: [PATCH 207/307] Fix ss-rules6 --- shadowsocks-libev/files/ss-rules6 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/files/ss-rules6 b/shadowsocks-libev/files/ss-rules6 index 33914950a..2b80f24b2 100755 --- a/shadowsocks-libev/files/ss-rules6 +++ b/shadowsocks-libev/files/ss-rules6 @@ -227,9 +227,10 @@ ss_rules6_iptchains_init_() { :ss_rules6_forward - $(ss_rules6_iptchains_mkprerules "$proto") -A ss_rules6_pre_src -m set --match-set ss_rules6_dst_bypass_ dst -j RETURN - -A ss_rules6_dst -m set --match-set ss_rules6_dst_bypass dst -j MARK --set-mark 0x539 + -A ss_rules6_pre_src -m set --match-set ss_rules6_dst_bypass dst -j MARK --set-mark 0x539 + -A ss_rules6_pre_src -m set --match-set ss_rules6_dst_bypass dst -j RETURN + -A ss_rules6_pre_src -m mark --mark 0x539 -j RETURN -A ss_rules6_dst -m set --match-set ss_rules6_dst_bypass dst -j RETURN - -A ss_rules6_dst -m mark --mark 0x539 -j RETURN -A ss_rules6_pre_src -p $proto $o_ipt_extra -j ss_rules6_src -A ss_rules6_src -m set --match-set ss_rules6_src_bypass src -j RETURN -A ss_rules6_src -m set --match-set ss_rules6_src_forward src -j ss_rules6_forward From 01c7bacb821448e911e5b3519c8095849903d9b2 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 5 Jul 2018 18:30:51 +0200 Subject: [PATCH 208/307] reload omr-6in4 after network changes --- omr-6in4/files/etc/uci-defaults/9010-omr-6in4 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 b/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 index 012388735..d877d5e11 100755 --- a/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 +++ b/omr-6in4/files/etc/uci-defaults/9010-omr-6in4 @@ -14,15 +14,21 @@ if [ "$(uci -q show network | grep omr6in4)" = "" ]; then set network.omr6in4.ip6addr=fe80::a00:2 commit network EOF - rm -f /tmp/luci-indexcache fi +if [ "$(uci -q get ucitrack.@network[-1].affects | grep omr6in4)" = "" ]; then + uci -q batch <<-EOF + add_list ucitrack.@network[-1].affects=omr6in4 + commit ucitrack + EOF +fi + + if [ "$(uci -q get network.omr6in4.ip6addr)" = "" ]; then uci -q batch <<-EOF set network.omr6in4.ip6addr=fe80::a00:2 commit network EOF - rm -f /tmp/luci-indexcache fi if [ "$(uci -q get firewall.zone_vpn.network | grep omr6in4)" = "" ]; then @@ -30,6 +36,6 @@ if [ "$(uci -q get firewall.zone_vpn.network | grep omr6in4)" = "" ]; then add_list firewall.zone_vpn.network=omr6in4 commit firewall EOF - rm -f /tmp/luci-indexcache fi +rm -f /tmp/luci-indexcache exit 0 From c00c038012fbbe1aceb4cd32d450ff792d866e00 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 5 Jul 2018 22:49:18 +0200 Subject: [PATCH 209/307] Fix french translation --- luci-app-openmptcprouter/po/fr/openmptcprouter.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 966348b39..ed3466dfb 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -43,7 +43,7 @@ msgid "IPv4 gateway" msgstr "Passerelle IPv4" msgid "IPv4 netmask" -msgstr "Masque de sous-réseau IPv6" +msgstr "Masque de sous-réseau IPv4" msgid "Interfaces settings" msgstr "Paramètres des interfaces" From 16d0c1d0f0fc571b4a08971f4b8d0c919f1f9729 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 6 Jul 2018 13:15:50 +0200 Subject: [PATCH 210/307] Networks changes --- openmptcprouter/files/etc/uci-defaults/1920-omr-network | 1 + openmptcprouter/files/etc/uci-defaults/2030-omr-wifi | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network index 499664e0a..ac9aeaa3f 100755 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ b/openmptcprouter/files/etc/uci-defaults/1920-omr-network @@ -59,6 +59,7 @@ set network.lan.proto=static set network.lan.ipaddr=192.168.100.1 set network.lan.netmask=255.255.255.0 set network.lan.ifname=eth0 +set network.lan.metric=2048 EOF uci -q batch <<-EOF diff --git a/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi b/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi index 7ab4854af..e79db4dc5 100755 --- a/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi +++ b/openmptcprouter/files/etc/uci-defaults/2030-omr-wifi @@ -7,4 +7,4 @@ uci -q show wireless.default_radio0 && { EOF } -exit 0 +exit 0 \ No newline at end of file From caad576774371c509fa30acc397e0d5ee48c40e7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 7 Jul 2018 21:14:26 +0200 Subject: [PATCH 211/307] Disable DHCP IPv6 --- openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp b/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp index 0977e94f6..39789a380 100755 --- a/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp +++ b/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp @@ -2,6 +2,7 @@ uci -q batch <<-EOF >/dev/null set dhcp.lan.ra_default=1 + set dhcp.lan.dhcpv6=disabled commit dhcp EOF rm -f /tmp/luci-indexcache From ba23bc1b06c3589a3a99d3336b82b135b970043b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 7 Jul 2018 21:14:53 +0200 Subject: [PATCH 212/307] Set TCP Keep Alive to 7200 default value --- .../root/etc/sysctl.d/zzz_openmptcprouter.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf index 510841c4f..263aaa631 100644 --- a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf +++ b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf @@ -1,2 +1,2 @@ -net.ipv4.tcp_keepalive_time=2400 +net.ipv4.tcp_keepalive_time=7200 net.ipv6.conf.all.disable_ipv6=0 \ No newline at end of file From a9d3616d216f804c70fdb814318cf04a7c4b0946 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 7 Jul 2018 21:15:36 +0200 Subject: [PATCH 213/307] Fix ShadowSocks IPv6 rules --- shadowsocks-libev/files/ss-rules | 1 + shadowsocks-libev/files/ss-rules6 | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/files/ss-rules b/shadowsocks-libev/files/ss-rules index 31d1d6db8..37b069b61 100755 --- a/shadowsocks-libev/files/ss-rules +++ b/shadowsocks-libev/files/ss-rules @@ -1,6 +1,7 @@ #!/bin/sh -e # # Copyright (C) 2017 Yousong Zhou +# Copyright (C) 2018 Ycarus (Yannick Chabanois) # # The design idea was derived from ss-rules by Jian Chang # diff --git a/shadowsocks-libev/files/ss-rules6 b/shadowsocks-libev/files/ss-rules6 index 2b80f24b2..2335e72e2 100755 --- a/shadowsocks-libev/files/ss-rules6 +++ b/shadowsocks-libev/files/ss-rules6 @@ -52,7 +52,8 @@ EOF } o_dst_bypass_=" - FE80::/10 + fe80::/10 + fd00::/8 " o_src_default=bypass o_dst_default=bypass @@ -168,8 +169,8 @@ ss_rules6_iptchains_init_tcp() { *nat :ss_rules6_local_out - -I OUTPUT 1 -p tcp -j ss_rules6_local_out - -A ss_rules6_local_out -m set --match-set ss_rules6_dst_bypass_ dst -j RETURN -A ss_rules6_local_out -m set --match-set ss_rules6_dst_bypass dst -j RETURN + -A ss_rules6_local_out -m set --match-set ss_rules6_dst_bypass_ dst -j RETURN -A ss_rules6_local_out -m mark --mark 0x539 -j RETURN -A ss_rules6_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" COMMIT From a0e46720742c54ecb510e6aac878696f197f6736 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 8 Jul 2018 16:43:10 +0200 Subject: [PATCH 214/307] Add help for omr-tracker ShadowSocks --- luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua index fd079951f..00a17ba11 100644 --- a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua +++ b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua @@ -5,7 +5,7 @@ local m, s, o m = Map("omr-tracker", translate("OMR-Tracker")) -s = m:section(TypedSection, "shadowsocks", translate("ShadowSocks tracker Settings"), translate("Detect if ShadowSocks is down and stop traffic redirection over it")) +s = m:section(TypedSection, "shadowsocks", translate("ShadowSocks tracker Settings"), translate("Detect if ShadowSocks is down and stop traffic redirection over it.")) s.anonymous = true s.addremove = false @@ -36,7 +36,7 @@ o.default = "2" o.datatype = "range(1, 100)" o.rmempty = false -o = s:option(DynamicList, "hosts", translate("Hosts")) +o = s:option(DynamicList, "hosts", translate("Hosts"), translate("IPs or domains must be available over http")) o.placeholder = "bing.com" o.default = { "bing.com", "google.com" } o.rmempty = false From 5c6be0092d3ff488c9a9b43b1991754129382ee5 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 8 Jul 2018 16:43:51 +0200 Subject: [PATCH 215/307] Display IPv6 in status page --- .../luasrc/controller/openmptcprouter.lua | 5 +++++ .../luasrc/view/openmptcprouter/wanstatus.htm | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 439cf2fd0..ad7612761 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -410,14 +410,19 @@ function interfaces_status() local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") if tracker_ip ~= "" then mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ip.openmptcprouter.com") + --mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com") else mArray.openmptcprouter["ss_addr"] = "" + --mArray.openmptcprouter["ss_addr6"] = "" end -- wanaddr mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com") + mArray.openmptcprouter["wan_addr6"] = sys.exec("wget -6 -qO- -T 1 http://ipv6.openmptcprouter.com") else mArray.openmptcprouter["ss_addr"] = "" + --mArray.openmptcprouter["ss_addr6"] = "" mArray.openmptcprouter["wan_addr"] = "" + mArray.openmptcprouter["wan_addr6"] = "" end mArray.openmptcprouter["remote_addr"] = luci.http.getenv("REMOTE_ADDR") or "" diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 3f75351e1..0473dafd7 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -72,18 +72,23 @@ } if (mArray.openmptcprouter.loadavg) { - content += "Load : " + mArray.openmptcprouter.loadavg; + content += "Load: " + mArray.openmptcprouter.loadavg; content += "
    "; } if (mArray.openmptcprouter.core_temp) { - content += "Core temp : " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °"; + content += "Core temp: " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °"; + content += "
    "; + } + if (mArray.openmptcprouter.wan_addr6) + { + content += "IPv6: " + mArray.openmptcprouter.wan_addr6; content += "
    "; } if (mArray.openmptcprouter.uptime) { var date = new Date(null); - content += "Uptime : " + String.format('%t', mArray.openmptcprouter.uptime); + content += "Uptime: " + String.format('%t', mArray.openmptcprouter.uptime); content += "
    "; } if (mArray.openmptcprouter.dhcpd) From b0ba81e1787a632cd95132849c95c493eccd9adc Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sun, 8 Jul 2018 16:44:41 +0200 Subject: [PATCH 216/307] Enable tracker for omrvpn interface --- .../files/etc/uci-defaults/1990-omr-tracker | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker b/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker index e2134d812..88c068d53 100755 --- a/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker +++ b/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker @@ -8,9 +8,19 @@ if [ "$(uci -q get omr-tracker.omrvpn)" = "" ]; then set omr-tracker.omrvpn.timeout=10 set omr-tracker.omrvpn.tries=5 set omr-tracker.omrvpn.interval=5 + set omr-tracker.omrvpn.enabled=1 commit omr-tracker EOF fi + +if [ "$(uci -q get omr-tracker.omrvpn.enabled)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set omr-tracker.omrvpn.enabled=1 + commit omr-tracker + EOF +fi + + rm -f /tmp/luci-indexcache exit 0 From 5329b486c82192c5b67443d8503910739c81828b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 9 Jul 2018 14:55:42 +0200 Subject: [PATCH 217/307] Add OBFS in advanced settings --- .../luasrc/controller/openmptcprouter.lua | 7 +++++++ .../luasrc/view/openmptcprouter/settings.htm | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index ad7612761..f8cf1cffa 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -310,6 +310,13 @@ function settings_add() end ucic:save("dhcp") ucic:commit("dhcp") + + local obfs = luci.http.formvalue("obfs") or 0 + ucic:foreach("shadowsocks-libev", "ss_redir", function (section) + ucic:set("shadowsocks-libev",section[".name"],"obfs",obfs) + end) + ucic:set("shadowsocks-libev","tracker","obfs",obfs) + ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index 3a7fe070f..6d7d64e16 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -19,6 +19,16 @@ checked<% end %>>
    +
    + +
    + checked<% end %>> +
    +
    + <%:OBFS must be enabled on VPS%> +
    +
    +
    <% if nixio.fs.access("/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq") then %>
    From 5b3a2f091d09ca9995029432c33babae4ce51cda Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 9 Jul 2018 14:56:11 +0200 Subject: [PATCH 218/307] Remove double help icon --- luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm | 3 --- .../luasrc/view/openmptcprouter/wizard.htm | 8 -------- 2 files changed, 11 deletions(-) diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index e427ac267..1ee44e742 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -42,7 +42,6 @@
    - help <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%>
    <% @@ -53,7 +52,6 @@
    - help <%:You need to use OpenMPTCProuter as DNS server when you want to bypass a domain%>
    <% @@ -122,7 +120,6 @@
    - help <%:If empty, multipath master interface is used if up else any other up interface.%>
    diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index f66a5a0ad..f0fa07510 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -47,7 +47,6 @@ %>
    - help <%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
    @@ -58,7 +57,6 @@ " data-type="base64">
    - help <%:ShadowSocks is used for TCP%>
    @@ -70,7 +68,6 @@ ">
    - help <%:Glorytun TCP is used by default for UDP and ICMP%>
    @@ -83,7 +80,6 @@ ">
    - help <%:MLVPN can replace Glorytun with connections with same latency%>
    @@ -97,7 +93,6 @@ " />
    - help <%:You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script to use OpenVPN TCP%>
    @@ -115,7 +110,6 @@
    - help <%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%>
    @@ -142,7 +136,6 @@ " data-type="ip4addr">
    - help <%:Set an IP in the same network as the modem%>
    @@ -159,7 +152,6 @@ " data-type="ip4addr">
    - help <%:Set here IP of the modem%>
    From 227f76a6eee2e2153a8f43a897e4425aecaeb0a2 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 9 Jul 2018 14:58:05 +0200 Subject: [PATCH 219/307] Add timeout param to OBFS plugin --- shadowsocks-libev/files/shadowsocks-libev.init | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 3771253b2..7df26349d 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -85,8 +85,8 @@ ss_mkjson_ss_local_conf() { obfs_options="obfs=$obfs_type" [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" - [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" - [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" + [ "$fast_open" = true ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = true ] && obfs_options="$obfs_options;mptcp" [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" cat <<-EOF ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} @@ -105,8 +105,8 @@ ss_mkjson_ss_redir_conf() { obfs_options="obfs=$obfs_type" [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" - [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" - [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" + [ "$fast_open" = true ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = true ] && obfs_options="$obfs_options;mptcp" [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" cat <<-EOF ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} @@ -119,8 +119,9 @@ ss_mkjson_ss_server_conf() { [ "$obfs" = 0 ] && obfs=false || obfs=true if $obfs; then obfs_options="obfs=$obfs_type" - [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" - [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" + [ "$fast_open" = true ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = true ] && obfs_options="$obfs_options;mptcp" + [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" cat <<-EOF ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-server${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF @@ -138,6 +139,7 @@ ss_mkjson_ss_tunnel_conf() { obfs_options="obfs=$obfs_type" [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" + [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" cat <<-EOF ${obfs:+${q}plugin${q}: ${q}/usr/bin/obfs-local${q},${q}plugin_opts${q}: ${q}$obfs_options${q},} EOF From af1694c0dd4a5f14b6136c439f92da1e4c1ce1ca Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 9 Jul 2018 16:15:11 +0200 Subject: [PATCH 220/307] Display IPv6 address in status page before other infos --- .../luasrc/view/openmptcprouter/wanstatus.htm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 0473dafd7..c98838fd2 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -80,11 +80,6 @@ content += "Core temp: " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °"; content += "
    "; } - if (mArray.openmptcprouter.wan_addr6) - { - content += "IPv6: " + mArray.openmptcprouter.wan_addr6; - content += "
    "; - } if (mArray.openmptcprouter.uptime) { var date = new Date(null); @@ -128,6 +123,11 @@ { statusMessage += 'DNS issue: can\'t resolve hostname
    '; } + if (mArray.openmptcprouter.wan_addr6) + { + content += "IPv6: " + mArray.openmptcprouter.wan_addr6; + content += "
    "; + } if(statusMessage !== "") { From beab5cb81fbe85c7b7d5c76470c8fbdd21cfcffa Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 10 Jul 2018 10:56:43 +0200 Subject: [PATCH 221/307] Fix OMR-Bypass with empty DPI proto --- luci-app-omr-bypass/luasrc/controller/omr-bypass.lua | 10 +++++++--- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua index 182e67b26..1ffbc1815 100644 --- a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua +++ b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua @@ -27,10 +27,14 @@ function bypass_add() ucic:set_list("omr-bypass","ips","ip",ip_ipset) local dpi = luci.http.formvalue("cbid.omr-bypass.dpi") - if (type(dpi) ~= "table") then - dpi = {dpi} + if dpi ~= "" then + if (type(dpi) ~= "table") then + dpi = {dpi} + end + ucic:set_list("omr-bypass","dpi","proto",dpi) + else + ucic:delete("omr-bypass","dpi","proto") end - ucic:set_list("omr-bypass","dpi","proto",dpi) local interface = luci.http.formvalue("cbid.omr-bypass.interface") or "" ucic:set("omr-bypass","defaults","ifname",interface) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 2fccdb113..dc1be3e78 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -18,6 +18,7 @@ _bypass_ip() { _bypass_proto() { local proto="$1" + [ -z "$proto" ] && return ndpi_rules="-A omr-bypass-dpi -m ndpi --$proto -j MARK --set-mark 0x539 $ndpi_rules" } From 598f2f43fa844a8718f44c920e9e80cfe3595524 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 10 Jul 2018 11:04:23 +0200 Subject: [PATCH 222/307] Fix ipv4 and ipv6 check --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 2 ++ 1 file changed, 2 insertions(+) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index dc1be3e78..1e29e781d 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -5,6 +5,8 @@ START=99 STOP=10 USE_PROCD=1 +. /usr/lib/unbound/iptools.sh + _bypass_ip() { local ip="$1" valid_ip4=$( valid_subnet4 $ip) From d4ac85f242205fc65e245e03f04b13d8dc551dd4 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 10 Jul 2018 14:24:05 +0200 Subject: [PATCH 223/307] Use string without mark number --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 1e29e781d..44a9ba50d 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -36,7 +36,7 @@ start_service() { ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1 - if [ "$(iptables -t mangle -L | grep 'MARK set 0x539')" = "" ]; then + if [ "$(iptables -t mangle -L | grep 'match-set ss_rules_dst_bypass dst MARK set')" = "" ]; then iptables-restore --noflush <<-EOF *mangle -A PREROUTING -m set --match-set ss_rules_dst_bypass dst -j MARK --set-mark 0x539 From 92428805b2836bbd1e0aeb3dc85f16f5ee0dd8ae Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 10 Jul 2018 16:19:18 +0200 Subject: [PATCH 224/307] Add IPv6 tunnel check --- .../luasrc/controller/openmptcprouter.lua | 9 ++++++++- .../luasrc/view/openmptcprouter/wanstatus.htm | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index f8cf1cffa..c3b2ccc2c 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -457,14 +457,21 @@ function interfaces_status() peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) end if peer ~= "" then - local tunnel_ping_test = ut.trim(sys.exec("ping -W 1 -c 1 " .. peer .. " | grep '100% packet loss'")) + local tunnel_ping_test = ut.trim(sys.exec("ping -W 1 -c 1 " .. peer .. " -I " .. tun_dev .. " | grep '100% packet loss'")) if tunnel_ping_test == "" then mArray.openmptcprouter["tun_state"] = 'UP' else mArray.openmptcprouter["tun_state"] = 'DOWN' end + local tunnel_ping6_test = ut.trim(sys.exec("ping6 -W 1 -c 1 fe80::a00:1 -I 6in4-omr6in4 | grep '100% packet loss'")) + if tunnel_ping6_test == "" then + mArray.openmptcprouter["tun6_state"] = 'UP' + else + mArray.openmptcprouter["tun6_state"] = 'DOWN' + end else mArray.openmptcprouter["tun_state"] = 'DOWN' + mArray.openmptcprouter["tun6_state"] = 'DOWN' end end end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index c98838fd2..e6f9a386e 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -142,6 +142,10 @@ { statusMessage += 'VPN tunnel DOWN
    '; } + if (mArray.openmptcprouter.tun6_state == "DOWN") + { + statusMessage += 'VPN IPv6 tunnel DOWN
    '; + } if (statusMessage !== "") { statusMessageClass = "warning"; From a3e16ee00e899928926d224758f7388d15c9c7f0 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 10 Jul 2018 17:36:28 +0200 Subject: [PATCH 225/307] Fix help info for MPTCP luci interface --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 26ff1346d..2fd8299ff 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -3,7 +3,7 @@ local sys = require "luci.sys" local ifaces = sys.net:devices() local m, s, o -m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings"), translate("Visit http://multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP for help.")) +m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings. Visit http://multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP for help.")) s = m:section(TypedSection, "globals") local mtcpg = s:option(ListValue, "multipath", translate("Multipath TCP")) From b206933fd449c11a861f4ddccf18eebd8a3dd862 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 12 Jul 2018 09:53:33 +0200 Subject: [PATCH 226/307] Use iperf3-ssl instead of iperf3 --- openmptcprouter-full/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 1c42c3725..6280007bc 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -23,7 +23,7 @@ MY_DEPENDS := \ uhttpd \ uhttpd-mod-ubus \ curl \ - iperf3 \ + iperf3-ssl \ arptables \ bind-dig \ conntrack conntrackd ebtables ebtables-utils ip-full \ From ee087a1e6ecceecd53d708e9cd29cd712013abd5 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 12 Jul 2018 09:54:31 +0200 Subject: [PATCH 227/307] Update openmptcprouter-full package version --- openmptcprouter-full/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 6280007bc..d667fd196 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openmptcprouter-full -PKG_VERSION:=0.9 +PKG_VERSION:=0.10 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk From 60c3666d6ef8b514b276cacdc3df760430a07d94 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 13 Jul 2018 13:45:54 +0200 Subject: [PATCH 228/307] Fix https://github.com/Ysurac/openmptcprouter/issues/105 --- shadowsocks-libev/files/shadowsocks-libev.init | 1 + 1 file changed, 1 insertion(+) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 7df26349d..abf3467f7 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -49,6 +49,7 @@ ss_mkjson_server_conf_() { [ -n "$server_port" ] || return 1 password="${password//\"/\\\"}" key="$(echo $key | sed 's/+/-/g; s/\//_/g;')" + [ "$method" = "none" -a -z "$key" ] && key="none" cat <<-EOF ${server:+${q}server${q}: ${q}$server${q},} "server_port": $server_port, From 4020e11a44fd14f7cf8c0a13a4bacea549376d87 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 13 Jul 2018 16:12:57 +0200 Subject: [PATCH 229/307] Add a simple iperf LuCi interface --- luci-app-iperf/Makefile | 15 +++ luci-app-iperf/luasrc/controller/iperf.lua | 38 ++++++++ luci-app-iperf/luasrc/view/iperf/test.htm | 106 +++++++++++++++++++++ luci-app-iperf/root/etc/config/iperf | 96 +++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 luci-app-iperf/Makefile create mode 100644 luci-app-iperf/luasrc/controller/iperf.lua create mode 100644 luci-app-iperf/luasrc/view/iperf/test.htm create mode 100644 luci-app-iperf/root/etc/config/iperf diff --git a/luci-app-iperf/Makefile b/luci-app-iperf/Makefile new file mode 100644 index 000000000..bb1700b16 --- /dev/null +++ b/luci-app-iperf/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2018 Ycarus (Yannick Chabanois) +# +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for iPerf3 +LUCI_DEPENDS:=+iperf3-ssl + +PKG_LICENSE:=GPLv3 + +include ../luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-iperf/luasrc/controller/iperf.lua b/luci-app-iperf/luasrc/controller/iperf.lua new file mode 100644 index 000000000..7174e5a25 --- /dev/null +++ b/luci-app-iperf/luasrc/controller/iperf.lua @@ -0,0 +1,38 @@ +local uci = luci.model.uci.cursor() +local ut = require "luci.util" + +module("luci.controller.iperf", package.seeall) + +function index() + --entry({"admin", "openmptcprouter", "iperf"}, cbi("iperf"), _("iperf")) + entry({"admin", "services", "iperf"}, alias("admin", "services", "iperf", "test"), _("iperf"),1) + entry({"admin", "services", "iperf", "test"}, template("iperf/test"), nil,1) + entry({"admin", "services", "iperf", "run_test"}, post("run_test")).leaf = true +end + +function run_test(server,proto,mode) + luci.http.prepare_content("text/plain") + local iperf + local addr = uci:get("iperf",server,"host") + local ports = uci:get("iperf",server,"ports") + local t={} + for pt in ports:gmatch("([^,%s]+)") do + table.insert(t,pt) + end + local port = t[ math.random( #t ) ] + if proto == "ipv4" then + iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -J" % {ut.shellquote(addr),port}) + --iperf = io.popen("iperf3 -c bouygues.iperf.fr -P 10 -4 -J") + else + iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -J" % {ut.shellquote(addr),port}) + end + if iperf then + while true do + local ln = iperf:read("*l") + if not ln then break end + luci.http.write(ln) + luci.http.write("\n") + end + end + return +end \ No newline at end of file diff --git a/luci-app-iperf/luasrc/view/iperf/test.htm b/luci-app-iperf/luasrc/view/iperf/test.htm new file mode 100644 index 000000000..f2fa1069e --- /dev/null +++ b/luci-app-iperf/luasrc/view/iperf/test.htm @@ -0,0 +1,106 @@ +<%+header%> + +<% + local uci = require("luci.model.uci").cursor() +%> + + + + +<% if stderr and #stderr > 0 then %>
    <%=pcdata(stderr)%>
    <% end %> +
    +
    +

    <%:iperf Speed tests%>

    +
    + <%:Settings%> +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + + +<%+footer%> diff --git a/luci-app-iperf/root/etc/config/iperf b/luci-app-iperf/root/etc/config/iperf new file mode 100644 index 000000000..911c3a1e6 --- /dev/null +++ b/luci-app-iperf/root/etc/config/iperf @@ -0,0 +1,96 @@ +config server 'bouygues' + option host 'bouygues.iperf.fr' + option ipv4 '1' + option ipv6 '1' + option speed '10000' + option ports '5200,5201,5202,5203,5204,5205,5206,5207,5208,5209' + option tcp '1' + option udp '0' + option location 'Europe' + +config server 'online_ipv4' + option host 'ping.online.net' + option ipv4 '1' + option ipv6 '0' + option speed '10000' + option ports '5200,5201,5202,5203,5204,5205,5206,5207,5208,5209' + option tcp '1' + option udp '1' + option location 'Europe' + +config server 'online_ipv6' + option host 'ping.online.net' + option ipv4 '0' + option ipv6 '1' + option speed '10000' + option ports '5200,5201,5202,5203,5204,5205,5206,5207,5208,5209' + option tcp '1' + option udp '1' + option location 'Europe' + +config server 'serverius' + option host 'speedtest.serverius.net' + option ipv4 '1' + option ipv6 '1' + option speed '10000' + option ports '5002' + option tcp '1' + option udp '1' + option location 'Europe' + +config server 'eenet' + option host 'iperf.eenet.ee' + option ipv4 '1' + option ipv6 '0' + option ports '5201' + option tcp '1' + option udp '1' + option location 'Europe' + +config server 'volia' + option host 'iperf.volia.net' + option ipv4 '1' + option ipv6 '0' + option ports '5201' + option tcp '1' + option udp '1' + option location 'Europe' + +config server 'it_north' + option host 'iperf.it-north.net' + option ipv4 '1' + option ipv6 '0' + option speed '1000' + option ports '5200,5201,5202,5203,5204,5205,5206,5207,5208,5209' + option tcp '1' + option udp '1' + option location 'Asia' + +config server 'biznet' + option host 'iperf.biznetnetworkds.com' + option ipv4 '1' + option ipv6 '1' + option speed '1000' + option ports '5201,5202,5203' + option tcp '1' + option udp '0' + option location 'Asia' + +config server 'scottlinux' + option host 'iperf.scottlinux.com' + option ipv4 '1' + option ipv6 '1' + option speed '1000' + option ports '5201' + option tcp '1' + option udp '1' + option location 'America' + +config server 'he' + option host 'iperf.he.net' + option ipv4 '1' + option ipv6 '1' + option ports '5201' + option tcp '1' + option udp '1' + option location 'America' From ed4545914414a9de13b32102407b97417eb38f49 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 14 Jul 2018 07:25:08 +0200 Subject: [PATCH 230/307] Accept ICMPv6 from LAN to router --- .../files/etc/uci-defaults/1980-omr-firewall | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 4a524dc8e..4267b2265 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -55,6 +55,21 @@ if [ "$(uci -q show firewall | grep Allow-Lan-to-Wan)" = "" ]; then commit firewall EOF fi + +if [ "$(uci -q show firewall | grep ICMPv6-Lan-to-OMR)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add firewall rule + set firewall.@rule[-1].enabled='1' + set firewall.@rule[-1].target='ACCEPT' + set firewall.@rule[-1].name='ICMPv6-Lan-to-OMR' + set firewall.@rule[-1].src='lan' + set firewall.@rule[-1].family='ipv6' + set firewall.@rule[-1].proto='icmp' + set firewall.@rule[-1].limit='1000/sec' + set firewall.@rule[-1].icmp_type='echo-reply destination-unreachable echo-request router-advertisement router-solicitation time-exceeded' + commit firewall + EOF +fi rm -f /tmp/luci-indexcache exit 0 From fa86ba21a6679bb6f0542193e18389ebd4453665 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 16 Jul 2018 12:16:54 +0200 Subject: [PATCH 231/307] Test upload and download with iperf --- luci-app-iperf/luasrc/controller/iperf.lua | 14 +++- luci-app-iperf/luasrc/view/iperf/test.htm | 77 ++++++++++++++++------ 2 files changed, 69 insertions(+), 22 deletions(-) diff --git a/luci-app-iperf/luasrc/controller/iperf.lua b/luci-app-iperf/luasrc/controller/iperf.lua index 7174e5a25..147ce4a66 100644 --- a/luci-app-iperf/luasrc/controller/iperf.lua +++ b/luci-app-iperf/luasrc/controller/iperf.lua @@ -10,7 +10,7 @@ function index() entry({"admin", "services", "iperf", "run_test"}, post("run_test")).leaf = true end -function run_test(server,proto,mode) +function run_test(server,proto,mode,updown) luci.http.prepare_content("text/plain") local iperf local addr = uci:get("iperf",server,"host") @@ -21,10 +21,18 @@ function run_test(server,proto,mode) end local port = t[ math.random( #t ) ] if proto == "ipv4" then - iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -J" % {ut.shellquote(addr),port}) + if updown == "upload" then + iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -O 3 -J" % {ut.shellquote(addr),port}) + else + iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -O 3 -R -J" % {ut.shellquote(addr),port}) + end --iperf = io.popen("iperf3 -c bouygues.iperf.fr -P 10 -4 -J") else - iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -J" % {ut.shellquote(addr),port}) + if updown == "upload" then + iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -O 3 -J" % {ut.shellquote(addr),port}) + else + iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -O 3 -R -J" % {ut.shellquote(addr),port}) + end end if iperf then while true do diff --git a/luci-app-iperf/luasrc/view/iperf/test.htm b/luci-app-iperf/luasrc/view/iperf/test.htm index f2fa1069e..f256c5a44 100644 --- a/luci-app-iperf/luasrc/view/iperf/test.htm +++ b/luci-app-iperf/luasrc/view/iperf/test.htm @@ -8,45 +8,84 @@ + diff --git a/luci-base/luasrc/view/cbi/header.htm b/luci-base/luasrc/view/cbi/header.htm index 9710bae8f..821fa3efa 100644 --- a/luci-base/luasrc/view/cbi/header.htm +++ b/luci-base/luasrc/view/cbi/header.htm @@ -1,18 +1,17 @@ <%+header%> -
    +>
    - diff --git a/luci-base/luasrc/view/cbi/network_ifacelist.htm b/luci-base/luasrc/view/cbi/network_ifacelist.htm index abfa33e1e..a97e9ef6d 100644 --- a/luci-base/luasrc/view/cbi/network_ifacelist.htm +++ b/luci-base/luasrc/view/cbi/network_ifacelist.htm @@ -26,9 +26,14 @@ else local n = self.network and net:get_network(self.network) if n then - local i - for _, i in ipairs(n:get_interfaces() or { n:get_interface() }) do - checked[i:name()] = true + local a = n:is_alias() + if a then + checked['@' .. a] = true + else + local i + for _, i in ipairs(n:get_interfaces() or { n:get_interface() }) do + checked[i:name()] = true + end end end end @@ -50,7 +55,8 @@ -->
      <% for _, iface in ipairs(ifaces) do - if (not self.nobridges or not iface:is_bridge()) and + if (not self.noaliases or iface:type() ~= "alias") and + (not self.nobridges or not iface:is_bridge()) and (not self.noinactive or iface:is_up()) and iface:name() ~= self.exclude then %> diff --git a/luci-base/luasrc/view/cbi/simpleform.htm b/luci-base/luasrc/view/cbi/simpleform.htm index c6000d22b..3e10724ec 100644 --- a/luci-base/luasrc/view/cbi/simpleform.htm +++ b/luci-base/luasrc/view/cbi/simpleform.htm @@ -1,56 +1,77 @@ -<% if not self.embedded then %> - -
      - - - -
      -<% end %> -
      - <% if self.title and #self.title > 0 then %>

      <%=self.title%>

      <% end %> - <% if self.description and #self.description > 0 then %>
      <%=self.description%>
      <% end %> - <% self:render_children() %> -
      -<%- if self.message then %> -
      <%=self.message%>
      -<%- end %> -<%- if self.errmessage then %> -
      <%=self.errmessage%>
      -<%- end %> -<% if not self.embedded then %> -
      -<%- - if type(self.hidden) == "table" then - for k, v in pairs(self.hidden) do --%> - -<%- +<% + if not self.embedded then + %> + + <% + end + + %>
      <% + + if self.title and #self.title > 0 then + %>

      <%=self.title%>

      <% + end + + if self.description and #self.description > 0 then + %>
      <%=self.description%>
      <% + end + + self:render_children() + + %>
      <% + + if self.message then + %>
      <%=self.message%>
      <% + end + + if self.errmessage then + %>
      <%=self.errmessage%>
      <% + end + + if not self.embedded then + if type(self.hidden) == "table" then + local k, v + for k, v in pairs(self.hidden) do + %><% + end end + + local display_back = (redirect) + local display_cancel = (self.cancel ~= false and self.on_cancel) + local display_skip = (self.flow and self.flow.skip) + local display_submit = (self.submit ~= false) + local display_reset = (self.reset ~= false) + + if display_back or display_cancel or display_skip or display_submit or display_reset then + %>
      <% + + if display_back then + %> <% + end + + if display_cancel then + local label = pcdata(self.cancel or translate("Cancel")) + %> <% + end + + if display_skip then + %> <% + end + + if display_submit then + local label = pcdata(self.submit or translate("Submit")) + %> <% + end + + if display_reset then + local label = pcdata(self.reset or translate("Reset")) + %> <% + end + + %>
      <% + end + + %><% end %> -<% if redirect then %> - -<% end %> -<%- if self.cancel ~= false and self.on_cancel then %> - -<% end %> -<%- if self.flow and self.flow.skip then %> - -<% end %> -<%- if self.submit ~= false then %> - -<% end %> -<%- if self.reset ~= false then %> - -<% end %> -
      - -<% end %> diff --git a/luci-base/luasrc/view/cbi/tblsection.htm b/luci-base/luasrc/view/cbi/tblsection.htm index ab1392204..408dfa7fe 100644 --- a/luci-base/luasrc/view/cbi/tblsection.htm +++ b/luci-base/luasrc/view/cbi/tblsection.htm @@ -1,8 +1,13 @@ <%- -local rowcnt = 1 +local rowcnt = 0 + function rowstyle() rowcnt = rowcnt + 1 - return (rowcnt % 2) + 1 + if rowcnt % 2 == 0 then + return " cbi-rowstyle-1" + else + return " cbi-rowstyle-2" + end end function width(o) @@ -15,54 +20,115 @@ function width(o) return '' end +local has_titles = false +local has_descriptions = false + local anonclass = (not self.anonymous or self.sectiontitle) and "named" or "anonymous" local titlename = ifattr(not self.anonymous or self.sectiontitle, "data-title", translate("Name")) +local i, k +for i, k in pairs(self.children) do + if not k.typename then + k.typename = k.template and k.template:gsub("^.+/", "") or "" + end + + if not has_titles and k.title and #k.title > 0 then + has_titles = true + end + + if not has_descriptions and k.description and #k.description > 0 then + has_descriptions = true + end +end + +function render_titles() + if not has_titles then + return + end + + %>
      ><% + + local i, k + for i, k in ipairs(self.children) do + if not k.optional then + %>
      ><% + + if k.titleref then + %><% + end + + write(k.title) + + if k.titleref then + %><% + end + + %>
      <% + end + end + + if self.sortable or self.extedit or self.addremove then + %>
      <% + end + + %>
      <% + + rowcnt = rowcnt + 1 +end + +function render_descriptions() + if not has_descriptions then + return + end + + %>
      <% + + local i, k + for i, k in ipairs(self.children) do + if not k.optional then + %>
      ><% + + write(k.description) + + %>
      <% + end + end + + if self.sortable or self.extedit or self.addremove then + %>
      <% + end + + %>
      <% + + rowcnt = rowcnt + 1 +end + -%>
      <% if self.title and #self.title > 0 then -%> - <%=self.title%> +

      <%=self.title%>

      <%- end %> <%- if self.sortable then -%> <%- end -%>
      <%=self.description%>
      - <%- local count = 0 -%>
      -
      > - <%- for i, k in pairs(self.children) do if not k.optional then -%> -
      > - <%- if k.titleref then -%><%- end -%> - <%-=k.title-%> - <%- if k.titleref then -%><%- end -%> -
      - <%- count = count + 1; end; end; if self.sortable or self.extedit or self.addremove then -%> -
      - <%- count = count + 1; end -%> -
      -
      - <%- for i, k in pairs(self.children) do if not k.optional then -%> -
      ><%=k.description%>
      - <%- end; end; if self.sortable or self.extedit or self.addremove then -%> -
      - <%- end -%> -
      - <%- local isempty, i, k = true, nil, nil + <%- + render_titles() + render_descriptions() + + local isempty, section, i, k = true, nil, nil for i, k in ipairs(self:cfgsections()) do isempty = false + section = k - local section = k local sectionname = striptags((type(self.sectiontitle) == "function") and self:sectiontitle(section) or k) local sectiontitle = ifattr(sectionname and (not self.anonymous or self.sectiontitle), "data-title", sectionname) - local colorclass = (self.extedit or self.rowcolors) and " cbi-rowstyle-%d" % rowstyle() or "" + local colorclass = (self.extedit or self.rowcolors) and rowstyle() or "" local scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" @@ -80,20 +146,22 @@ local titlename = ifattr(not self.anonymous or self.sectiontitle, "data-title", <%- if self.sortable or self.extedit or self.addremove then -%>
      - <%- if self.sortable then -%> - - - <% end; if self.extedit then -%> - onclick="location.href='<%=self.extedit:format(section)%>'" - <%- elseif type(self.extedit) == "function" then - %> onclick="location.href='<%=self:extedit(section)%>'" - <%- end - %> alt="<%:Edit%>" title="<%:Edit%>" /> - <% end; if self.addremove then %> - - <%- end -%> +
      + <%- if self.sortable then -%> + + + <% end; if self.extedit then -%> + onclick="location.href='<%=self.extedit:format(section)%>'" + <%- elseif type(self.extedit) == "function" then + %> onclick="location.href='<%=self:extedit(section)%>'" + <%- end + %> alt="<%:Edit%>" title="<%:Edit%>" /> + <% end; if self.addremove then %> + + <%- end -%> +
      <%- end -%>
      @@ -124,7 +192,7 @@ local titlename = ifattr(not self.anonymous or self.sectiontitle, "data-title",
      <%:Invalid%>
      <%- end %>
      - +
      <% end %> diff --git a/luci-base/po/ca/base.po b/luci-base/po/ca/base.po index 12f9d4096..f240167fb 100644 --- a/luci-base/po/ca/base.po +++ b/luci-base/po/ca/base.po @@ -158,9 +158,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Consultes concurrents max." -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -222,9 +219,6 @@ msgstr "Punt d'accés" msgid "Actions" msgstr "Accions" -msgid "Activate this network" -msgstr "Activa aquesta xarxa" - msgid "Active IPv4-Routes" msgstr "Rutes IPv4 actives" @@ -277,19 +271,34 @@ msgstr "" msgid "Alert" msgstr "Alerta" -msgid "" -"Allocate IP addresses sequentially, starting from the lowest available " -"address" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" msgstr "" msgid "Allocate IP sequentially" msgstr "" +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + msgid "Allow SSH password authentication" msgstr "" "Permetre l'autenticació SSH amb " "contrasenya" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Permet-les totes menys les llistades" @@ -323,6 +332,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -500,12 +514,12 @@ msgstr "Enrere al resum" msgid "Back to scan results" msgstr "Enrere als resultats de l'escaneig" +msgid "Backup" +msgstr "Còpia de seguretat" + msgid "Backup / Flash Firmware" msgstr "Còpia de seguretat i microprogramari" -msgid "Backup / Restore" -msgstr "Còpia de seguretat i restauració de la configuració" - msgid "Backup file list" msgstr "Llista de còpies de seguretat" @@ -515,6 +529,9 @@ msgstr "Adreça mal especificada!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -573,6 +590,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Ús de CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Cancel·la" @@ -640,13 +660,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Fes clic a \"Genera l'arxiu\" per obtenir un fitxer .tar.gz amb els fitxers " -"de configuració actuals. Per restablir el microprogramari al seu estat " -"inicial, fes clic a \"Restableix la configuració\" (només funciona amb " -"imatges squashfs)." +"de configuració actuals." msgid "Client" msgstr "Client" @@ -681,6 +698,9 @@ msgstr "" msgid "Configuration" msgstr "Configuració" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Es mantindran els fitxers de configuració." @@ -702,6 +722,9 @@ msgstr "Connectat" msgid "Connection Limit" msgstr "Límit de connexió" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Connexions" @@ -815,6 +838,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -851,6 +877,9 @@ msgstr "Suprimeix" msgid "Delete this network" msgstr "Suprimeix aquesta xarxa" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Descripció" @@ -869,10 +898,10 @@ msgstr "Configuració de dispositiu" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -900,15 +929,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Inhabilitat" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Descarta les respostes RFC1918 des de dalt" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1199,6 +1237,9 @@ msgstr "Filtra privat" msgid "Filter useless" msgstr "Filtra els no útils" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1252,6 +1293,9 @@ msgstr "Escrivint a la memòria flaix..." msgid "Force" msgstr "Força" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Força el CCMP (AES)" @@ -1314,6 +1358,9 @@ msgstr "Només GPRS" msgid "Gateway" msgstr "Passarel·la" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Ports de passarel·la" @@ -1390,9 +1437,6 @@ msgstr "" "Aquí pots afegir-hi les claus SSH públiques (una per línia) per entrar per " "SSH amb autenticació per clau." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Controlador sense fil Hermes 802.11b" - msgid "Hide ESSID" msgstr "" "No mostris l'ESSID" @@ -1409,6 +1453,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "Xarxa o adreça IP" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Nom de màquina" @@ -1430,6 +1477,12 @@ msgstr "" msgid "IP address" msgstr "Adreça IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1599,6 +1652,9 @@ msgstr "Entrant:" msgid "Info" msgstr "Informació" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Script d'inici" @@ -1635,21 +1691,12 @@ msgstr "Visió de conjunt de la interfície" msgid "Interface is reconnecting..." msgstr "La interfície s'està reconnectant..." -msgid "Interface is shutting down..." -msgstr "La interfície s'està aturant..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "Interfícies" @@ -1840,6 +1887,9 @@ msgstr "Càrrega mitjana" msgid "Loading" msgstr "Carregant" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1904,6 +1954,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "Adreça MAC" @@ -1919,6 +1972,9 @@ msgstr "Llista MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1998,6 +2054,9 @@ msgstr "" msgid "Modem device" msgstr "Dispositiu mòdem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Temps d'espera d'inici de mòdem" @@ -2095,6 +2154,9 @@ msgstr "Utilitats de xarxa" msgid "Network boot image" msgstr "Imatge d'inici de xarxa" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Xarxa sense interfícies." @@ -2116,6 +2178,9 @@ msgstr "Cap fitxer trobat" msgid "No information available" msgstr "No hi ha informació disponible" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Sense memòria cau negativa" @@ -2134,6 +2199,9 @@ msgstr "No hi ha cap contrasenya establerta!" msgid "No rules in this chain" msgstr "No hi ha regles en aquesta cadena" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Cap zona assignada" @@ -2268,6 +2336,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2346,6 +2417,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2433,6 +2507,9 @@ msgstr "Màxim:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2501,9 +2578,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Evita la comunicació client a client" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2552,6 +2626,11 @@ msgstr "" msgid "Quality" msgstr "Calidad" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2570,9 +2649,6 @@ msgstr "RX" msgid "RX Rate" msgstr "Velocitat RX" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Controlador sense fil RaLink 802.11%s" - msgid "Radius-Accounting-Port" msgstr "" @@ -2591,6 +2667,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2611,16 +2690,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2666,9 +2735,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Reconnex aquesta interfície" -msgid "Reconnecting interface" -msgstr "Reconnectant la interfície" - msgid "References" msgstr "Referències" @@ -2757,6 +2823,12 @@ msgstr "Reinicia" msgid "Restart Firewall" msgstr "Reinicia el tallafocs" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Restauració de la configuració" + msgid "Restore backup" msgstr "Restaura còpia de seguretat" @@ -2845,6 +2917,9 @@ msgstr "Desa i aplica" msgid "Scan" msgstr "Escaneja" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Tasques programades" @@ -2886,6 +2961,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Configura la sincronització de l'hora" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2895,15 +2976,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "Atura aquesta interfície" -msgid "Shutdown this network" -msgstr "Atura aquesta xarxa" - msgid "Signal" msgstr "Senyal" @@ -2999,6 +3080,9 @@ msgstr "Prioritat d'inici" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Arrencada" @@ -3149,6 +3233,9 @@ msgstr "" "Els caràcters permets són: A-Z, a-z, 0-9 i _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3365,10 +3452,13 @@ msgstr "Zona horària" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Per restaurar els fitxers de configuració, pots pujar una còpia de seguretat " -"generada anteriorment aquí." +"generada anteriorment aquí. Per restablir el microprogramari al seu estat " +"inicial, fes clic a \"Restableix la configuració\" (només funciona amb " +"imatges squashfs)." msgid "Tone" msgstr "" @@ -3436,9 +3526,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3448,6 +3556,9 @@ msgstr "Desconegut" msgid "Unknown Error, password not changed!" msgstr "La contrasenya no s'ha canviat a causa d'un error desconegut!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Sense gestionar" @@ -3457,6 +3568,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Canvis sense desar" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Tipus de protocol no suportat." @@ -3596,6 +3713,9 @@ msgstr "Verifica" msgid "Version" msgstr "Versió" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3665,8 +3785,11 @@ msgstr "Resum sense fils" msgid "Wireless Security" msgstr "Seguretat sense fils" -msgid "Wireless is disabled or not associated" -msgstr "El dispositiu sense fils està inhabilitat o sense associar" +msgid "Wireless is disabled" +msgstr "El dispositiu sense fils està inhabilitat" + +msgid "Wireless is not associated" +msgstr "El dispositiu sense fils està sense associar" msgid "Wireless is restarting..." msgstr "El dispositiu sense fils està reiniciant..." @@ -3677,12 +3800,6 @@ msgstr "La xarxa sense fil està inhabilitada" msgid "Wireless network is enabled" msgstr "La xarxa sense fils està habilitada" -msgid "Wireless restarted" -msgstr "Sense fils reinciat" - -msgid "Wireless shut down" -msgstr "Sense fils aturat" - msgid "Write received DNS requests to syslog" msgstr "Escriure les peticions DNS rebudes al registre del sistema" @@ -3790,6 +3907,9 @@ msgstr "fitxer DNS local" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "no" @@ -3865,6 +3985,33 @@ msgstr "sí" msgid "« Back" msgstr "« Enrere" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Activa aquesta xarxa" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Controlador sense fil Hermes 802.11b" + +#~ msgid "Interface is shutting down..." +#~ msgstr "La interfície s'està aturant..." + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "Controlador sense fil RaLink 802.11%s" + +#~ msgid "Reconnecting interface" +#~ msgstr "Reconnectant la interfície" + +#~ msgid "Shutdown this network" +#~ msgstr "Atura aquesta xarxa" + +#~ msgid "Wireless restarted" +#~ msgstr "Sense fils reinciat" + +#~ msgid "Wireless shut down" +#~ msgstr "Sense fils aturat" + #~ msgid "DHCP Leases" #~ msgstr "Arrendaments DHCP" diff --git a/luci-base/po/cs/base.po b/luci-base/po/cs/base.po index 7ecd4868d..2d81e890f 100644 --- a/luci-base/po/cs/base.po +++ b/luci-base/po/cs/base.po @@ -155,9 +155,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Nejvyšší počet souběžných dotazů" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -217,9 +214,6 @@ msgstr "Přístupový bod" msgid "Actions" msgstr "Akce" -msgid "Activate this network" -msgstr "Aktivovat tuto síť" - msgid "Active IPv4-Routes" msgstr "" "Aktivní záznamy ve směrovací tabulce SSH password authentication" msgstr "Povolit SSH autentizaci heslem" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Povolit vše mimo uvedené" @@ -319,6 +328,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -495,12 +509,12 @@ msgstr "Zpět k přehledu" msgid "Back to scan results" msgstr "Zpět k výsledkům vyhledávání" +msgid "Backup" +msgstr "Zálohovat" + msgid "Backup / Flash Firmware" msgstr "Zálohovat / nahrát firmware" -msgid "Backup / Restore" -msgstr "Zálohovat / obnovit" - msgid "Backup file list" msgstr "Seznam souborů k zálohování" @@ -510,6 +524,9 @@ msgstr "Zadána neplatná adresa!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -566,6 +583,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Vytížení CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Storno" @@ -633,12 +653,9 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" -"Pro stažení archivu tar s aktuální konfigurací stiskněte \"Vytvořit archiv" -"\". Pro obnovení továrního nastavení stiskněte \"Obnovit výchozí\" (možné " -"pouze s obrazy squashfs)." +"Pro stažení archivu tar s aktuální konfigurací stiskněte \"Vytvořit archiv\"." msgid "Client" msgstr "Klient" @@ -675,6 +692,9 @@ msgstr "" msgid "Configuration" msgstr "Nastavení" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Konfigurační soubory budou zachovány." @@ -696,6 +716,9 @@ msgstr "Připojeno" msgid "Connection Limit" msgstr "Omezení počtu připojení" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Připojení" @@ -809,6 +832,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -847,6 +873,9 @@ msgstr "Odstranit" msgid "Delete this network" msgstr "Odstranit tuto síť" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Popis" @@ -865,10 +894,10 @@ msgstr "Nastavení zařízení" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -896,15 +925,24 @@ msgstr "Zakázat nastavení DNS" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Zakázáno" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Vyřadit upstream RFC1918 odpovědi" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1201,6 +1239,9 @@ msgstr "Filtrovat soukromé" msgid "Filter useless" msgstr "Filtrovat nepotřebné" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1254,6 +1295,9 @@ msgstr "Nahrávám..." msgid "Force" msgstr "Vynutit" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Vynutit CCMP (AES)" @@ -1316,6 +1360,9 @@ msgstr "Pouze GPRS" msgid "Gateway" msgstr "Brána" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Porty brány" @@ -1389,9 +1436,6 @@ msgid "" msgstr "" "Vložte veřejné klíče (na každý řadek jeden) pro ověřovaní SSH přístupu." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b bezdrátový ovladač" - msgid "Hide ESSID" msgstr "Skrývat ESSID" @@ -1408,6 +1452,9 @@ msgid "Host-IP or Network" msgstr "" "IP adresa hostitele nebo síť" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Jméno hostitele" @@ -1429,6 +1476,12 @@ msgstr "" msgid "IP address" msgstr "IP adresy" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1598,6 +1651,9 @@ msgstr "Příchozí:" msgid "Info" msgstr "Info" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Initskript" @@ -1634,21 +1690,12 @@ msgstr "Přehled rozhraní" msgid "Interface is reconnecting..." msgstr "Rozhraní se znovu připojuje..." -msgid "Interface is shutting down..." -msgstr "Rozhraní se vypíná..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "Rozhraní není přítomné nebo je dosud nepřipojeno." -msgid "Interface reconnected" -msgstr "Rozhraní bylo znovu připojeno" - -msgid "Interface shut down" -msgstr "Rozhraní bylo vypnuto" - msgid "Interfaces" msgstr "Rozhraní" @@ -1842,6 +1889,9 @@ msgstr "Zátěž průměrná" msgid "Loading" msgstr "Načítání" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1912,6 +1962,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "Nejnižší zapůjčenou adresu použít jako offset síťové adresy." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-Adresa" @@ -1927,6 +1980,9 @@ msgstr "Seznam Mac" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -2006,6 +2062,9 @@ msgstr "" msgid "Modem device" msgstr "Modemové zařízení" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Časový limit inicializace modemu" @@ -2103,6 +2162,9 @@ msgstr "Síťové nástroje" msgid "Network boot image" msgstr "Síťový bootovací obraz" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Síť bez rozhraní." @@ -2124,6 +2186,9 @@ msgstr "Nebyly nalezeny žádné soubory" msgid "No information available" msgstr "Údaje nejsou k dispozici" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Žádná negativní mezipaměť" @@ -2142,6 +2207,9 @@ msgstr "Žádné heslo!" msgid "No rules in this chain" msgstr "Žádná pravidla v tomto řetězci" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Žádná zóna nepřiřazena" @@ -2275,6 +2343,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2355,6 +2426,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2442,6 +2516,9 @@ msgstr "Špička:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2512,9 +2589,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Zabraňuje komunikaci klient-klient" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b Wireless Controller" - msgid "Private Key" msgstr "" @@ -2563,6 +2637,11 @@ msgstr "" msgid "Quality" msgstr "Kvalita" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2581,9 +2660,6 @@ msgstr "RX" msgid "RX Rate" msgstr "RX Rate" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s Wireless Controller" - msgid "Radius-Accounting-Port" msgstr "Port pro Radius-Accounting" @@ -2602,6 +2678,9 @@ msgstr "Tajný klíč pro Radius-Authentication" msgid "Radius-Authentication-Server" msgstr "Server Radius-Authentication" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2625,19 +2704,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Opravdu resetovat všechny změny?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Opravdu vypnout rozhraní \"%s\" ?\n" -"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím " -"tohoto rozhraní." - msgid "Really switch protocol?" msgstr "Opravdu prohodit protokol?" @@ -2683,9 +2749,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Přepojit toto rozhraní" -msgid "Reconnecting interface" -msgstr "Přepojuji rozhraní" - msgid "References" msgstr "Reference" @@ -2775,6 +2838,12 @@ msgstr "Restart" msgid "Restart Firewall" msgstr "Restartovat firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Obnovit" + msgid "Restore backup" msgstr "Obnovit zálohu" @@ -2862,6 +2931,9 @@ msgstr "Uložit & použít" msgid "Scan" msgstr "Skenovat" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Naplánované úlohy" @@ -2905,6 +2977,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Nastavit synchronizaci času" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Nastavit DHCP server" @@ -2914,15 +2992,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Ukázat aktuální seznam záložních souborů" msgid "Shutdown this interface" msgstr "Shodit toho rozhraní" -msgid "Shutdown this network" -msgstr "Shodit tuto síť" - msgid "Signal" msgstr "Signál" @@ -3023,6 +3101,9 @@ msgstr "Priorita spouštění" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Po spuštění" @@ -3182,6 +3263,9 @@ msgstr "" "Povolené znaky jsou: A-Z, a-z, 0-9 a " "_" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3398,10 +3482,12 @@ msgstr "Časové pásmo" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Zde můžete nahrát dříve vygenerovaný záložní archiv, pokud chcete obnovit " -"konfigurační soubory." +"konfigurační soubory. Pro obnovení továrního nastavení stiskněte \"Obnovit " +"výchozí\" (možné pouze s obrazy squashfs)." msgid "Tone" msgstr "" @@ -3469,9 +3555,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3481,6 +3585,9 @@ msgstr "Neznámý" msgid "Unknown Error, password not changed!" msgstr "Neznámá chyba, heslo nebylo změněno!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Nespravovaný" @@ -3490,6 +3597,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Neuložené změny" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Nepodporovaný typ protokolu." @@ -3632,6 +3745,9 @@ msgstr "Ověřit" msgid "Version" msgstr "Verze" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3701,8 +3817,11 @@ msgstr "Přehled bezdrátových sití" msgid "Wireless Security" msgstr "Zabezpečení bezdrátové sítě" -msgid "Wireless is disabled or not associated" -msgstr "Bezdrátová síť je vypnuta nebo nespojena" +msgid "Wireless is disabled" +msgstr "Bezdrátová síť vypnuta" + +msgid "Wireless is not associated" +msgstr "Bezdrátová síť nespojena" msgid "Wireless is restarting..." msgstr "Probíhá restartování bezdrátové sítě..." @@ -3713,12 +3832,6 @@ msgstr "Bezdrátová síť je zakázána" msgid "Wireless network is enabled" msgstr "Bezdrátová síť je povolena" -msgid "Wireless restarted" -msgstr "Bezdrátová síť restartována" - -msgid "Wireless shut down" -msgstr "Bezdrátová síť vypnuta" - msgid "Write received DNS requests to syslog" msgstr "Zapisovat přijaté požadavky DNS do systemového logu" @@ -3824,6 +3937,9 @@ msgstr "místní DNS soubor" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "ne" @@ -3899,6 +4015,50 @@ msgstr "ano" msgid "« Back" msgstr "« Zpět" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Aktivovat tuto síť" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b bezdrátový ovladač" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Rozhraní se vypíná..." + +#~ msgid "Interface reconnected" +#~ msgstr "Rozhraní bylo znovu připojeno" + +#~ msgid "Interface shut down" +#~ msgstr "Rozhraní bylo vypnuto" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b Wireless Controller" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s Wireless Controller" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Opravdu vypnout rozhraní \"%s\" ?\n" +#~ "Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím " +#~ "tohoto rozhraní." + +#~ msgid "Reconnecting interface" +#~ msgstr "Přepojuji rozhraní" + +#~ msgid "Shutdown this network" +#~ msgstr "Shodit tuto síť" + +#~ msgid "Wireless restarted" +#~ msgstr "Bezdrátová síť restartována" + +#~ msgid "Wireless shut down" +#~ msgstr "Bezdrátová síť vypnuta" + #~ msgid "DHCP Leases" #~ msgstr "DHCP výpůjčky" diff --git a/luci-base/po/de/base.po b/luci-base/po/de/base.po index bffed8e7a..e04a9b07a 100644 --- a/luci-base/po/de/base.po +++ b/luci-base/po/de/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-26 17:57+0200\n" -"PO-Revision-Date: 2018-01-09 08:01+0100\n" +"PO-Revision-Date: 2018-07-15 12:25+0200\n" "Last-Translator: JoeSemler \n" "Language: de\n" "MIME-Version: 1.0\n" @@ -50,7 +50,7 @@ msgid "-- match by uuid --" msgstr "-- UUID vergleichen --" msgid "-- please select --" -msgstr "" +msgstr "-- Bitte auswählen --" msgid "1 Minute Load:" msgstr "Systemlast (1 Minute):" @@ -138,6 +138,8 @@ msgstr "MAC-Adresse" msgid "DUID" msgstr "" +"DUID" msgid "" "Max. Max. concurrent queries" msgstr "Max. Anzahl gleichzeitiger Abfragen" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -185,7 +184,7 @@ msgid "ARP retry threshold" msgstr "Grenzwert für ARP-Auflösungsversuche" msgid "ATM (Asynchronous Transfer Mode)" -msgstr "" +msgstr "ATM (Asynchroner Transfer-Modus)" msgid "ATM Bridges" msgstr "ATM Brücken" @@ -220,9 +219,6 @@ msgstr "Access Point" msgid "Actions" msgstr "Aktionen" -msgid "Activate this network" -msgstr "Dieses Netzwerk aktivieren" - msgid "Active IPv4-Routes" msgstr "Aktive IPv4-Routen" @@ -274,6 +270,18 @@ msgstr "Vollständige Sendeleistung (ACTATP)" msgid "Alert" msgstr "Alarm" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "Alias-Schnittstelle" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -287,6 +295,9 @@ msgstr "IPs sequenziell vergeben" msgid "Allow SSH password authentication" msgstr "Erlaube Anmeldung per Passwort" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Alle außer gelistete erlauben" @@ -322,6 +333,11 @@ msgstr "Erlaubte IP-Adressen" msgid "Always announce default router" msgstr "Immer Defaultrouter ankündigen" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -401,12 +417,14 @@ msgstr "Beliebige Zone" msgid "Apply request failed with status %h" msgstr "" +"Anforderung zur Anwendung der Änderungen mit Status %h " +"fehlgeschlagen" msgid "Apply unchecked" -msgstr "" +msgstr "Ungeprüft anwenden" msgid "Architecture" -msgstr "" +msgstr "Architektur" msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" @@ -427,7 +445,7 @@ msgid "Associated Stations" msgstr "Assoziierte Clients" msgid "Associations" -msgstr "" +msgstr "Assoziierungen" msgid "Auth Group" msgstr "Berechtigungsgruppe" @@ -504,12 +522,12 @@ msgstr "Zurück zur Übersicht" msgid "Back to scan results" msgstr "Zurück zu den Scan-Ergebnissen" +msgid "Backup" +msgstr "Sichern" + msgid "Backup / Flash Firmware" msgstr "Backup / Firmware Update" -msgid "Backup / Restore" -msgstr "Sichern / Wiederherstellen" - msgid "Backup file list" msgstr "Liste zu sichernder Dateien" @@ -519,6 +537,9 @@ msgstr "Ungültige Adresse angegeben!" msgid "Band" msgstr "Frequenztyp" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -582,6 +603,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU-Nutzung (%)" +msgid "Call failed" +msgstr "Anruf fehlgeschlagen" + msgid "Cancel" msgstr "Abbrechen" @@ -598,7 +622,7 @@ msgid "Changes applied." msgstr "Änderungen angewendet." msgid "Changes have been reverted." -msgstr "" +msgstr "Änderungen wurden verworfen" msgid "Changes the administrator password for accessing the device" msgstr "Ändert das Administratorpasswort für den Zugriff auf dieses Gerät" @@ -610,6 +634,8 @@ msgid "" "Channel %d is not available in the %s regulatory domain and has been auto-" "adjusted to %d." msgstr "" +"Kanal %d ist in der Regulierungszone \"%s\" nicht verfügbar und wurde " +"automatisch auf %d gesetzt." msgid "Check" msgstr "Prüfen" @@ -650,13 +676,10 @@ msgstr "Cisco UDP-Kapselung" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Zum Herunterladen der aktuellen Konfigurationsdateien als gepacktes Archiv " -"\"Sicherung erstellen\" drücken. \"Konfiguration zurücksetzen\" stellt den " -"Auslieferungszustand des Systems wieder her (nur möglich bei squashfs-" -"Images)." +"\"Sicherung erstellen\" drücken." msgid "Client" msgstr "Client" @@ -697,14 +720,17 @@ msgstr "" msgid "Configuration" msgstr "Konfiguration" +msgid "Configuration failed" +msgstr "Konfiguration fehlgeschlagen" + msgid "Configuration files will be kept." msgstr "Konfigurationsdateien sichern" msgid "Configuration has been applied." -msgstr "" +msgstr "Die Konfiguration wurde angewendet." msgid "Configuration has been rolled back!" -msgstr "" +msgstr "Die Konfiguration wurde zurückgerollt!" msgid "Confirmation" msgstr "Bestätigung" @@ -718,6 +744,9 @@ msgstr "Verbunden" msgid "Connection Limit" msgstr "Verbindungslimit" +msgid "Connection attempt failed" +msgstr "Verbindungsversuch fehlgeschlagen" + msgid "Connections" msgstr "Verbindungen" @@ -726,6 +755,10 @@ msgid "" "changes. You might need to reconnect if you modified network related " "settings such as the IP address or wireless security credentials." msgstr "" +"Das Gerät konnte nach Anwendung der Konfigurationsänderungen nicht mehr " +"erreicht werden. Unter Umständen müssen Sie sich neu verbinden wenn " +"netzwerkbezogene Einstellungen wie die IP-Adresse oder W-LAN Passwörter " +"geändert wurden." msgid "Country" msgstr "Land" @@ -774,6 +807,9 @@ msgid "" "Custom files (certificates, scripts) may remain on the system. To prevent " "this, perform a factory-reset first." msgstr "" +"Eigene Dateien wir Zertifikate oder Scripte können unter Umständen auf dem " +"System verbleiben. Um dies zu vermeiden, sollte zuerst auf " +"Werkseinstellungen zurückgesetzt werden." msgid "" "Customizes the behaviour of the device IGMP " "snooping" msgstr "" +"IGMP-Erkennung " +"aktivieren" msgid "Enable STP" msgstr "STP aktivieren" @@ -1105,7 +1158,7 @@ msgid "Enable this mount" msgstr "Diesen Mountpunkt aktivieren" msgid "Enable this network" -msgstr "" +msgstr "Dieses Netzwerk aktivieren" msgid "Enable this swap" msgstr "Diesen Auslagerungsspeicher aktivieren" @@ -1117,7 +1170,7 @@ msgid "Enabled" msgstr "Aktiviert" msgid "Enables IGMP snooping on this bridge" -msgstr "" +msgstr "Aktiviert die automatische IGMP-Erkennung auf dieser Netzwerkbrücke" msgid "" "Enables fast roaming among access points that belong to the same Mobility " @@ -1142,10 +1195,10 @@ msgid "Endpoint Port" msgstr "Entfernter Port" msgid "Enter custom value" -msgstr "" +msgstr "Eigenen Wert angeben" msgid "Enter custom values" -msgstr "" +msgstr "Eigene Werte angeben" msgid "Erasing..." msgstr "Lösche..." @@ -1200,16 +1253,18 @@ msgid "Extra SSH command options" msgstr "Zusätzliche SSH-Kommando-Optionen" msgid "FT over DS" -msgstr "" +msgstr "FT-über-DS" msgid "FT over the Air" -msgstr "" +msgstr "FT-drahtlos" msgid "FT protocol" -msgstr "" +msgstr "FT Protokoll" msgid "Failed to confirm apply within %ds, waiting for rollback…" msgstr "" +"Konnte nicht innerhalb von %d Sekunden bestätigen, warte auf Zurückrollen " +"der Änderungen..." msgid "File" msgstr "Datei" @@ -1229,6 +1284,9 @@ msgstr "Private Anfragen filtern" msgid "Filter useless" msgstr "Windowsanfragen filtern" +msgid "Finalizing failed" +msgstr "Finalisierung fehlgeschlagen" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1285,6 +1343,9 @@ msgstr "Firmware wird installiert..." msgid "Force" msgstr "Start erzwingen" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "CCMP (AES) erzwingen" @@ -1351,6 +1412,9 @@ msgstr "Nur GPRS" msgid "Gateway" msgstr "Gateway" +msgid "Gateway address is invalid" +msgstr "Gateway-Adresse ist ungültig" + msgid "Gateway ports" msgstr "Gateway-Ports" @@ -1426,9 +1490,6 @@ msgid "" msgstr "" "Hier können öffentliche SSH-Schlüssel reinkopiert werden (einer pro Zeile)." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b W-LAN Adapter" - msgid "Hide ESSID" msgstr "ESSID verstecken" @@ -1444,6 +1505,9 @@ msgstr "Host Verfallsdatum" msgid "Host-IP or Network" msgstr "Host-IP oder Netzwerk" +msgid "Host-Uniq tag content" +msgstr "\"Host-Uniq\"-Bezeichner" + msgid "Hostname" msgstr "Hostname" @@ -1465,6 +1529,12 @@ msgstr "IP-Adressen" msgid "IP address" msgstr "IP-Adresse" +msgid "IP address in invalid" +msgstr "IP-Adresse ist ungültig" + +msgid "IP address is missing" +msgstr "IP-Adresse fehlt" + msgid "IPv4" msgstr "IPv4" @@ -1639,6 +1709,9 @@ msgstr "Eingehend:" msgid "Info" msgstr "Info" +msgid "Initialization failure" +msgstr "Initialisierung fehlgeschlagen" + msgid "Initscript" msgstr "Startscript" @@ -1678,21 +1751,12 @@ msgstr "Schnittstellenübersicht" msgid "Interface is reconnecting..." msgstr "Schnittstelle verbindet neu..." -msgid "Interface is shutting down..." -msgstr "Schnittstelle fährt herunter..." - msgid "Interface name" msgstr "Schnittstellenname" msgid "Interface not present or not connected yet." msgstr "Schnittstelle existiert nicht oder ist nicht verbunden." -msgid "Interface reconnected" -msgstr "Schnittstelle neu verbunden" - -msgid "Interface shut down" -msgstr "Schnittstelle heruntergefahren" - msgid "Interfaces" msgstr "Schnittstellen" @@ -1900,6 +1964,9 @@ msgstr "Durchschnittslast" msgid "Loading" msgstr "Lade" +msgid "Local IP address is invalid" +msgstr "Lokale IP-Adresse ist ungültig" + msgid "Local IP address to assign" msgstr "Lokale IP-Adresse" @@ -1972,6 +2039,9 @@ msgstr "Signalverlustsekunden (LOSS)" msgid "Lowest leased address as offset from the network address." msgstr "Kleinste vergebene Adresse (Netzwerkadresse + x)" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-Adresse" @@ -1987,6 +2057,9 @@ msgstr "MAC-Adressliste" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "MAP-Regel ist ungültig" + msgid "MB/s" msgstr "MB/s" @@ -2069,6 +2142,9 @@ msgstr "Modell" msgid "Modem device" msgstr "Modemgerät" +msgid "Modem information query failed" +msgstr "Modem-Informationsabfrage fehlgeschlagen" + msgid "Modem init timeout" msgstr "Wartezeit für Modeminitialisierung" @@ -2166,6 +2242,9 @@ msgstr "Netzwerk-Werkzeuge" msgid "Network boot image" msgstr "Netzwerk-Boot-Image" +msgid "Network device is not present" +msgstr "Netzwerkgerät ist nicht vorhanden" + msgid "Network without interfaces." msgstr "Netzwerk ohne Schnittstellen." @@ -2187,6 +2266,9 @@ msgstr "Keine Dateien gefunden" msgid "No information available" msgstr "Keine Informationen verfügbar" +msgid "No matching prefix delegation" +msgstr "Kein passendes delegiertes Prefix" + msgid "No negative cache" msgstr "Kein Negativ-Cache" @@ -2206,6 +2288,9 @@ msgstr "Kein Passwort gesetzt!" msgid "No rules in this chain" msgstr "Keine Regeln in dieser Kette" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Keine Zone zugewiesen" @@ -2253,6 +2338,8 @@ msgstr "DNS-Auflösung" msgid "Number of cached DNS entries (max is 10000, 0 is no caching)" msgstr "" +"Anzahl der zwischengespeicherten DNS-Einträge. Maximum sind 10000 Einträge, " +"\"0\" deaktiviert die Zwischenspeicherung." msgid "OK" msgstr "OK" @@ -2267,7 +2354,7 @@ msgid "Obfuscated Password" msgstr "Chiffriertes Passwort" msgid "Obtain IPv6-Address" -msgstr "" +msgstr "IPv6-Adresse beziehen" msgid "Off-State Delay" msgstr "Verzögerung für Ausschalt-Zustand" @@ -2348,6 +2435,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "Optional. Routen für erlaubte IP-Adressen erzeugen." +msgid "Optional. Description of peer." +msgstr "Optionale Beschreibung des entfernten VPN-Partners." + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2434,6 +2524,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "PIN-Code abgelehnt" + msgid "PMK R1 Push" msgstr "" @@ -2462,7 +2555,7 @@ msgid "PSID-bits length" msgstr "PSID-Bitlänge" msgid "PTM/EFM (Packet Transfer Mode)" -msgstr "" +msgstr "PTM/EFM (Paket-Transfer-Modus)" msgid "Package libiwinfo required!" msgstr "Benötige das libiwinfo Paket!" @@ -2495,7 +2588,7 @@ msgid "Password successfully changed!" msgstr "Passwort erfolgreich geändert!" msgid "Password2" -msgstr "" +msgstr "Passwort Bestätigung" msgid "Path to CA-Certificate" msgstr "Pfad zum CA-Zertifikat" @@ -2521,6 +2614,9 @@ msgstr "Spitze:" msgid "Peer IP address to assign" msgstr "Entfernte IP-Adresse" +msgid "Peer address is missing" +msgstr "Entfernte IP-Adresse fehlt" + msgid "Peers" msgstr "Verbindungspartner" @@ -2591,9 +2687,6 @@ msgstr "Verhindert das Binden an diese Schnittstellen" msgid "Prevents client-to-client communication" msgstr "Unterbindet Client-Client-Verkehr" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b W-LAN Adapter" - msgid "Private Key" msgstr "Privater Schlüssel" @@ -2644,6 +2737,11 @@ msgstr "" msgid "Quality" msgstr "Qualität" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "R0-Schlüsselgültigkeit" @@ -2651,7 +2749,7 @@ msgid "R1 Key Holder" msgstr "R1-Schlüsselinhaber" msgid "RFC3947 NAT-T mode" -msgstr "" +msgstr "RFC3947 \"NAT-T\"-Modus" msgid "RTS/CTS Threshold" msgstr "RTS/CTS-Schwelle" @@ -2663,9 +2761,6 @@ msgstr "RX" msgid "RX Rate" msgstr "RX-Rate" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s W-LAN Adapter" - msgid "Radius-Accounting-Port" msgstr "Radius-Accounting-Port" @@ -2684,6 +2779,11 @@ msgstr "Radius-Authentication-Secret" msgid "Radius-Authentication-Server" msgstr "Radius-Authentication-Server" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" +"Hexadezimal-kodierte Zeichensequenz. Nur angeben wenn der Internetanbieter " +"einen bestimmten Wert erwartet." + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2693,6 +2793,9 @@ msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " "access to this device if you are connected via this interface" msgstr "" +"Diese Schnittstelle wirklich löschen? Das Löschen kann nicht rückgängig " +"gemacht werden! Der Kontakt zum Gerät könnte verloren gehen wenn die " +"Verbidung über diese Schnittstelle erfolgt." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2706,19 +2809,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Sollen wirklich alle Änderungen verworfen werden?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Die Schnitstelle \"%s\" wirklich herunterfahren?\n" -"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " -"Schnittstelle verbunden sind." - msgid "Really switch protocol?" msgstr "Protokoll wirklich wechseln?" @@ -2764,9 +2854,6 @@ msgstr "Empfohlen. IP-Adresse der WireGuard-Schnittstelle." msgid "Reconnect this interface" msgstr "Diese Schnittstelle neu verbinden" -msgid "Reconnecting interface" -msgstr "Verbinde Schnittstelle neu" - msgid "References" msgstr "Verweise" @@ -2864,6 +2951,12 @@ msgstr "Neustarten" msgid "Restart Firewall" msgstr "Firewall neu starten" +msgid "Restart radio interface" +msgstr "W-LAN-Gerät neu starten" + +msgid "Restore" +msgstr "Wiederherstellen" + msgid "Restore backup" msgstr "Sicherung wiederherstellen" @@ -2874,13 +2967,13 @@ msgid "Revert" msgstr "Verwerfen" msgid "Revert changes" -msgstr "" +msgstr "Änderungen verwerfen" msgid "Revert request failed with status %h" -msgstr "" +msgstr "Anforderung zum Verwerfen mit Status %h fehlgeschlagen" msgid "Reverting configuration…" -msgstr "" +msgstr "Verwerfe Konfigurationsänderungen..." msgid "Root" msgstr "Root" @@ -2952,6 +3045,9 @@ msgstr "Speichern & Anwenden" msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" @@ -2998,6 +3094,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Zeitsynchronisierung einrichten" +msgid "Setting PLMN failed" +msgstr "Setzen der PLMN fehlgeschlagen" + +msgid "Setting operation mode failed" +msgstr "Setzen des Betriebsmodus fehlgeschlagen" + msgid "Setup DHCP Server" msgstr "DHCP Server einrichten" @@ -3007,15 +3109,15 @@ msgstr "schwerwiegende Fehlersekunden (SES)" msgid "Short GI" msgstr "kurzes Guardintervall" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Zeige aktuelle Liste der gesicherten Dateien" msgid "Shutdown this interface" msgstr "Diese Schnittstelle herunterfahren" -msgid "Shutdown this network" -msgstr "Dieses Netzwerk herunterfahren" - msgid "Signal" msgstr "Signal" @@ -3032,7 +3134,7 @@ msgid "Size (.ipk)" msgstr "Größe (.ipk)" msgid "Size of DNS query cache" -msgstr "" +msgstr "Größe des DNS-Caches" msgid "Skip" msgstr "Überspringen" @@ -3050,7 +3152,7 @@ msgid "Software" msgstr "Paketverwaltung" msgid "Software VLAN" -msgstr "" +msgstr "Software-VLAN" msgid "Some fields are invalid, cannot save values!" msgstr "Einige Felder sind ungültig, kann das Formular nicht speichern!" @@ -3121,6 +3223,9 @@ msgid "Start priority" msgstr "Startpriorität" msgid "Starting configuration apply…" +msgstr "Starte Anwendung der Konfigurationsänderungen..." + +msgid "Starting wireless scan..." msgstr "" msgid "Startup" @@ -3171,7 +3276,7 @@ msgstr "" "Logeinträge für erfolgreiche Operationen dieser Protokolle unterdrücken" msgid "Swap" -msgstr "" +msgstr "Auslagerungsspeicher" msgid "Swap Entry" msgstr "Auslagerungsdatei" @@ -3192,10 +3297,10 @@ msgstr "" "unpassend sein." msgid "Switch Port Mask" -msgstr "" +msgstr "Switch-Port-Maske" msgid "Switch VLAN" -msgstr "" +msgstr "Switch-VLAN" msgid "Switch protocol" msgstr "Wechsle Protokoll" @@ -3292,6 +3397,9 @@ msgstr "" "Erlaubte Buchstaben sind: A-Z, a-z, 0-9 and _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "Das Backup-Archiv scheint keine valide GZip-Datei zu sein." + msgid "The configuration file could not be loaded due to the following error:" msgstr "" "Die Konfigurationsdatei konnte aufgrund der folgenden Fehler nicht geladen " @@ -3306,6 +3414,14 @@ msgid "" "or revert all pending changes to keep the currently working configuration " "state." msgstr "" +"Das Gerät konnte nach dem Anwenden der ausstehenden Änderungen innerhalb von " +"%d Sekunden nicht mehr erreicht werden, daher wurde die Änderungen aus " +"Sicherheitsgründen zurückgerollt. Wenn Sie der Meinung sind, dass die " +"Änderungen trotzdem korrekt sind, wenden sie die Änderungen ungeprüft an. " +"Alternativ können Sie diese Meldung schließen und die Konfiguration weiter " +"bearbeiten bevor Sie das Anwenden neu versuchen oder alle austehenden " +"Änderungen verwerfen um den aktuell funktionierenden Konfigurationsstand " +"beizubehalten." msgid "" "The device file of the memory or partition (e.g." @@ -3412,7 +3528,7 @@ msgid "There are no active leases." msgstr "Es gibt z.Z. keine aktiven Leases." msgid "There are no changes to apply." -msgstr "" +msgstr "Es gibt keine ausstehenden Änderungen anzuwenden." msgid "There are no pending changes to revert!" msgstr "Es gibt keine ausstehenen Änderungen zurückzusetzen!" @@ -3525,10 +3641,13 @@ msgstr "Zeitzone" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Zum Wiederherstellen der Konfiguration kann hier ein bereits vorhandenes " -"Backup-Archiv hochgeladen werden." +"Backup-Archiv hochgeladen werden. \"Konfiguration zurücksetzen\" stellt den " +"Auslieferungszustand des Systems wieder her (nur möglich bei squashfs-" +"Images)." msgid "Tone" msgstr "Ton" @@ -3597,9 +3716,27 @@ msgstr "USB Anschlüsse" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "Gerätename konnte nicht bestimmt werden" + +msgid "Unable to determine external IP address" +msgstr "Externe IP-Adresse konnte nicht bestimmt werden" + +msgid "Unable to determine upstream interface" +msgstr "Externe Netzwerkschnittstelle konnte nicht bestimmt werden" + msgid "Unable to dispatch" msgstr "Kann Anfrage nicht zustellen" +msgid "Unable to obtain client ID" +msgstr "Client-ID konnte nicht bezogen werden" + +msgid "Unable to resolve AFTR host name" +msgstr "Der AFTR-Hostname konnte nicht aufgelöst werden" + +msgid "Unable to resolve peer host name" +msgstr "Der Name des entfernten Hosts konnte nicht aufgelöst werden" + msgid "Unavailable Seconds (UAS)" msgstr "Nicht verfügbare Sekunden (UAS)" @@ -3609,6 +3746,9 @@ msgstr "Unbekannt" msgid "Unknown Error, password not changed!" msgstr "Unbekannter Fehler, Passwort nicht geändert!" +msgid "Unknown error (%s)" +msgstr "Protokollfehler: %s" + msgid "Unmanaged" msgstr "Ignoriert" @@ -3618,11 +3758,17 @@ msgstr "Aushängen" msgid "Unsaved Changes" msgstr "Ungespeicherte Änderungen" +msgid "Unsupported MAP type" +msgstr "Nicht unterstützter MAP-Typ" + +msgid "Unsupported modem" +msgstr "Nicht unterstütztes Modem" + msgid "Unsupported protocol type." msgstr "Nicht unterstützter Protokolltyp." msgid "Up" -msgstr "" +msgstr "Hoch" msgid "Update lists" msgstr "Listen aktualisieren" @@ -3749,7 +3895,7 @@ msgid "VPN Server's certificate SHA1 hash" msgstr "SHA1-Hash des VPN-Server-Zertifikates" msgid "VPNC (CISCO 3000 (and others) VPN)" -msgstr "" +msgstr "VPNC (VPN für CISCO 3000 und Ähnliche)" msgid "Vendor" msgstr "Hersteller" @@ -3763,6 +3909,9 @@ msgstr "Verifizieren" msgid "Version" msgstr "Version" +msgid "Virtual dynamic interface" +msgstr "Virtuelle dynamisches Schnittstelle" + msgid "WDS" msgstr "WDS" @@ -3795,7 +3944,7 @@ msgid "Waiting for command to complete..." msgstr "Der Befehl wird ausgeführt..." msgid "Waiting for configuration to get applied… %ds" -msgstr "" +msgstr "Warte auf das Anwenden der Konfigurationsänderungen... %d Sekunden" msgid "Waiting for device..." msgstr "Warte auf Gerät..." @@ -3836,8 +3985,11 @@ msgstr "Drahtlosübersicht" msgid "Wireless Security" msgstr "WLAN-Verschlüsselung" -msgid "Wireless is disabled or not associated" -msgstr "WLAN ist deaktiviert oder nicht assoziiert" +msgid "Wireless is disabled" +msgstr "W-LAN ist deaktiviert" + +msgid "Wireless is not associated" +msgstr "W-LAN ist nicht assoziiert" msgid "Wireless is restarting..." msgstr "WLAN startet neu..." @@ -3848,12 +4000,6 @@ msgstr "Das WLAN-Netzwerk ist deaktiviert" msgid "Wireless network is enabled" msgstr "Das WLAN-Netzwerk ist aktiviert" -msgid "Wireless restarted" -msgstr "WLAN neu gestartet" - -msgid "Wireless shut down" -msgstr "WLAN heruntergefahren" - msgid "Write received DNS requests to syslog" msgstr "Empfangene DNS-Anfragen in das Systemprotokoll schreiben" @@ -3895,7 +4041,7 @@ msgid "bridged" msgstr "bridged" msgid "create" -msgstr "" +msgstr "erzeugen" msgid "create:" msgstr "erstelle:" @@ -3959,6 +4105,9 @@ msgstr "Lokale DNS-Datei" msgid "minutes" msgstr "Minuten" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "nein" @@ -3981,13 +4130,13 @@ msgid "open" msgstr "offen" msgid "output" -msgstr "" +msgstr "ausgehend" msgid "overlay" msgstr "Overlay" msgid "random" -msgstr "" +msgstr "zufällig" msgid "relay mode" msgstr "Relay-Modus" @@ -4033,6 +4182,62 @@ msgstr "ja" msgid "« Back" msgstr "« Zurück" +<<<<<<< HEAD +======= + +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Dieses Netzwerk aktivieren" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b W-LAN Adapter" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Schnittstelle fährt herunter..." + +#~ msgid "Interface reconnected" +#~ msgstr "Schnittstelle neu verbunden" + +#~ msgid "Interface shut down" +#~ msgstr "Schnittstelle heruntergefahren" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b W-LAN Adapter" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s W-LAN Adapter" + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface" +#~ msgstr "" +#~ "Dieses Netzwerk wirklich herunterfahren? Der Kontakt zum Gerät könnte " +#~ "verloren gehen wenn die Verbindung über dieses Netzwerk erfolgt." + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Die Schnitstelle \"%s\" wirklich herunterfahren?\n" +#~ "Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " +#~ "Schnittstelle verbunden sind." + +#~ msgid "Reconnecting interface" +#~ msgstr "Verbinde Schnittstelle neu" + +#~ msgid "Shutdown this network" +#~ msgstr "Dieses Netzwerk herunterfahren" + +#~ msgid "Wireless is disabled or not associated" +#~ msgstr "WLAN ist deaktiviert oder nicht assoziiert" + +#~ msgid "Wireless restarted" +#~ msgstr "WLAN neu gestartet" + +#~ msgid "Wireless shut down" +#~ msgstr "WLAN heruntergefahren" #~ msgid "DHCP Leases" #~ msgstr "DHCP-Leases" @@ -4069,3 +4274,4 @@ msgstr "« Zurück" #~ msgid "IPv6 WAN Status" #~ msgstr "IPv6 WAN Status" +>>>>>>> 86660f92d... i18n: sync translations diff --git a/luci-base/po/el/base.po b/luci-base/po/el/base.po index f9246a58d..86483ca6d 100644 --- a/luci-base/po/el/base.po +++ b/luci-base/po/el/base.po @@ -158,9 +158,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Μεγ. πλήθος ταυτόχρονων ερωτηματων" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -220,9 +217,6 @@ msgstr "Σημείο Πρόσβασης" msgid "Actions" msgstr "Ενέργειες" -msgid "Activate this network" -msgstr "Ενεργοποίηση αυτού του δικτύου" - msgid "Active IPv4-Routes" msgstr "" "Ενεργές Διαδρομές IPv4" @@ -277,6 +271,18 @@ msgstr "" msgid "Alert" msgstr "Ειδοποίηση" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -290,6 +296,9 @@ msgstr "" "Επιτρέπει την εξουσιοδότηση SSH με " "κωδικό πρόσβασης" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Να επιτρέπονται όλες, εκτός από αυτές στη λίστα" @@ -326,6 +335,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -502,12 +516,12 @@ msgstr "Πίσω προς επισκόπηση" msgid "Back to scan results" msgstr "Πίσω στα αποτελέσματα σάρωσης" +msgid "Backup" +msgstr "Αποθήκευση" + msgid "Backup / Flash Firmware" msgstr "Αντίγραφο ασφαλείας / Εγγραφή FLASH Υλικολογισμικό" -msgid "Backup / Restore" -msgstr "Αποθήκευση / Επαναφορά Αντίγραφου Ασφαλείας" - msgid "Backup file list" msgstr "Λίστα αρχείων για αντίγραφο ασφαλείας" @@ -518,6 +532,9 @@ msgstr "Μη έγκυρη διεύθυνση!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -575,6 +592,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Χρήση CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Ακύρωση" @@ -640,13 +660,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Κλικ στο \"Δημιουργία αρχείου\" για να κατεβάσετε ένα tar αρχείο με τα " -"τρέχοντα αρχεία παραμετροποίησης. Για να επαναφέρετε το υλικολογισμικό στην " -"αρχική του κατάσταση, κάντε κλικ στο \"Εκτέλεσε επαναφορά\" (δυνατό μόνο σε " -"squashfs εικόνες)." +"τρέχοντα αρχεία παραμετροποίησης." msgid "Client" msgstr "Πελάτης" @@ -684,6 +701,9 @@ msgstr "" msgid "Configuration" msgstr "Παραμετροποίηση" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Τα αρχεία παραμετροποίησης θα διατηρηθούν." @@ -705,6 +725,9 @@ msgstr "Συνδεδεμένος" msgid "Connection Limit" msgstr "Όριο Συνδέσεων" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Συνδέσεις" @@ -818,6 +841,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -856,6 +882,9 @@ msgstr "Διαγραφή" msgid "Delete this network" msgstr "Διαγραφή αυτού του δικτύου" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Περιγραφή" @@ -874,10 +903,10 @@ msgstr "Παραμετροποίηση Συσκευής" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -905,15 +934,24 @@ msgstr "Απενεργοποίηση ρυθμίσεων DNS" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Απενεργοποιημένο" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Αγνόησε τις απαντήσεις ανοδικής ροής RFC1918" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1214,6 +1252,9 @@ msgstr "Φιλτράρισμα ιδιωτικών" msgid "Filter useless" msgstr "Φιλτράρισμα άχρηστων" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1267,6 +1308,9 @@ msgstr "Φλασάρεται..." msgid "Force" msgstr "Επιβολή" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Επιβολή CCMP (AES)" @@ -1330,6 +1374,9 @@ msgstr "" msgid "Gateway" msgstr "Πύλη" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Θύρες πύλης" @@ -1402,9 +1449,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "Κρυφό ESSID" @@ -1421,6 +1465,9 @@ msgid "Host-IP or Network" msgstr "" "IP Υπολογιστή ή Δικτύου" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Όνομα Υπολογιστή" @@ -1442,6 +1489,12 @@ msgstr "" msgid "IP address" msgstr "Διεύθυνση IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1615,6 +1668,9 @@ msgstr "" msgid "Info" msgstr "Πληροφορίες" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Σενάριο εκκίνησης" @@ -1651,21 +1707,12 @@ msgstr "Επισκόπηση Διεπαφής" msgid "Interface is reconnecting..." msgstr "Η διεπαφή επανασυνδέεται..." -msgid "Interface is shutting down..." -msgstr "Η διεπαφή απενεργοποιείται..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "Η διεπαφή δεν υπάρχει ή δεν έχει συνδεθεί ακόμη." -msgid "Interface reconnected" -msgstr "Η διεπαφή επανασυνδέθηκε" - -msgid "Interface shut down" -msgstr "Η διεπαφή απενεργοποιήθηκε" - msgid "Interfaces" msgstr "Διεπαφές" @@ -1854,6 +1901,9 @@ msgstr "Μέσος όρος φόρτου" msgid "Loading" msgstr "Φόρτωση" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1918,6 +1968,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-Διεύθυνση" @@ -1933,6 +1986,9 @@ msgstr "Λίστα MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -2013,6 +2069,9 @@ msgstr "" msgid "Modem device" msgstr "Συσκευή Modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2111,6 +2170,9 @@ msgstr "Εργαλεία Δικτύου" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2132,6 +2194,9 @@ msgstr "Δε βρέθηκαν αρχεία" msgid "No information available" msgstr "Δεν υπάρχουν πληροφορίες διαθέσιμες" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2150,6 +2215,9 @@ msgstr "Δεν έχει οριστεί κωδικός πρόσβασης!" msgid "No rules in this chain" msgstr "Δεν υπάρχει κανόνας σε αυτή την αλυσίδα" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Δεν έχει ανατεθεί ζώνη" @@ -2284,6 +2352,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2362,6 +2433,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2449,6 +2523,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2518,9 +2595,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Αποτρέπει την επικοινωνία μεταξύ πελατών" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2569,6 +2643,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2587,9 +2666,6 @@ msgstr "RX" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2608,6 +2684,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2628,16 +2707,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Αρχικοποίηση όλων των αλλαγών;" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "Αλλαγή πρωτοκόλλου;" @@ -2683,9 +2752,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Επανασύνδεση της διεπαφής" -msgid "Reconnecting interface" -msgstr "Επανασύνδεση της διεπαφής" - msgid "References" msgstr "Αναφορές" @@ -2774,6 +2840,12 @@ msgstr "Επανεκκίνηση" msgid "Restart Firewall" msgstr "Επανεκκίνηση Τείχους Προστασίας" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Επαναφορά Αντίγραφου Ασφαλείας" + msgid "Restore backup" msgstr "Επαναφορά αντιγράφου ασφαλείας" @@ -2863,6 +2935,9 @@ msgstr "Αποθήκευση & Εφαρμογή" msgid "Scan" msgstr "Σάρωση" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Προγραμματισμένες Εργασίες" @@ -2904,6 +2979,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Ρύθμιση Εξυπηρετητή DHCP" @@ -2913,15 +2994,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "Απενεργοποίηση αυτής της διεπαφής" -msgid "Shutdown this network" -msgstr "Απενεργοποίηση αυτού του δικτύου" - msgid "Signal" msgstr "Σήμα" @@ -3019,6 +3100,9 @@ msgstr "Προτεραιότητα εκκίνησης" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Εκκίνηση" @@ -3167,6 +3251,9 @@ msgstr "" "Οι επιτρεπόμενοι χαρακτήρες είναι: A-Z, a-z, " "0-9 και _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3366,8 +3453,13 @@ msgstr "Ζώνη ώρας" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" +"To restore configuration files, you can upload a previously generated backup " +"archive here. Για να επαναφέρετε το υλικολογισμικό στην αρχική του " +"κατάσταση, κάντε κλικ στο \"Εκτέλεσε επαναφορά\" (δυνατό μόνο σε squashfs " +"εικόνες)." msgid "Tone" msgstr "" @@ -3435,9 +3527,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3447,6 +3557,9 @@ msgstr "Άγνωστο" msgid "Unknown Error, password not changed!" msgstr "Άγνωστο Λάθος. ο κωδικός πρόσβασης δεν άλλαξε!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3456,6 +3569,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Μη-αποθηκευμένες Αλλαγές" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3592,6 +3711,9 @@ msgstr "" msgid "Version" msgstr "Έκδοση" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3659,8 +3781,11 @@ msgstr "Επισκόπηση Ασύρματου Δικτύου" msgid "Wireless Security" msgstr "Ασφάλεια Ασύρματου Δικτύου" -msgid "Wireless is disabled or not associated" -msgstr "Το ασύρματο δίκτυο είναι απενεργοποιημένο ή μη συνδεδεμένο" +msgid "Wireless is disabled" +msgstr "Το ασύρματο δίκτυο είναι απενεργοποιημένο" + +msgid "Wireless is not associated" +msgstr "Το ασύρματο δίκτυο μη συνδεδεμένο" msgid "Wireless is restarting..." msgstr "Το ασύρματο δίκτυο επανεκκινείται..." @@ -3671,12 +3796,6 @@ msgstr "Το ασύρματο δίκτυο είναι ανενεργό" msgid "Wireless network is enabled" msgstr "Το ασύρματο δίκτυο είναι ενεργό" -msgid "Wireless restarted" -msgstr "Το ασύρματο δίκτυο επανεκκινήθηκε" - -msgid "Wireless shut down" -msgstr "Το ασύρματο δίκτυο τερματίστηκε" - msgid "Write received DNS requests to syslog" msgstr "Καταγραφή των ληφθέντων DNS αιτήσεων στο syslog" @@ -3783,6 +3902,9 @@ msgstr "τοπικό αρχείο DNS" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "όχι" @@ -3858,6 +3980,30 @@ msgstr "ναι" msgid "« Back" msgstr "« Πίσω" +#~ msgid "Activate this network" +#~ msgstr "Ενεργοποίηση αυτού του δικτύου" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Η διεπαφή απενεργοποιείται..." + +#~ msgid "Interface reconnected" +#~ msgstr "Η διεπαφή επανασυνδέθηκε" + +#~ msgid "Interface shut down" +#~ msgstr "Η διεπαφή απενεργοποιήθηκε" + +#~ msgid "Reconnecting interface" +#~ msgstr "Επανασύνδεση της διεπαφής" + +#~ msgid "Shutdown this network" +#~ msgstr "Απενεργοποίηση αυτού του δικτύου" + +#~ msgid "Wireless restarted" +#~ msgstr "Το ασύρματο δίκτυο επανεκκινήθηκε" + +#~ msgid "Wireless shut down" +#~ msgstr "Το ασύρματο δίκτυο τερματίστηκε" + #~ msgid "DHCP Leases" #~ msgstr "DHCP Leases" diff --git a/luci-base/po/en/base.po b/luci-base/po/en/base.po index f2f65a53b..c5e15b492 100644 --- a/luci-base/po/en/base.po +++ b/luci-base/po/en/base.po @@ -158,9 +158,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Max. concurrent queries" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -220,9 +217,6 @@ msgstr "Access Point" msgid "Actions" msgstr "Actions" -msgid "Activate this network" -msgstr "Activate this network" - msgid "Active IPv4-Routes" msgstr "Active IPv4-Routes" @@ -274,6 +268,18 @@ msgstr "" msgid "Alert" msgstr "Alert" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -285,6 +291,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "Allow SSH password authentication" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Allow all except listed" @@ -317,6 +326,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -493,12 +507,12 @@ msgstr "Back to overview" msgid "Back to scan results" msgstr "Back to scan results" +msgid "Backup" +msgstr "" + msgid "Backup / Flash Firmware" msgstr "Backup / Flash Firmware" -msgid "Backup / Restore" -msgstr "Backup / Restore" - msgid "Backup file list" msgstr "Backup file list" @@ -508,6 +522,9 @@ msgstr "Bad address specified!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -564,6 +581,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU usage (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Cancel" @@ -629,12 +649,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgid "Client" msgstr "Client" @@ -671,6 +689,9 @@ msgstr "" msgid "Configuration" msgstr "Configuration" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Configuration files will be kept." @@ -692,6 +713,9 @@ msgstr "Connected" msgid "Connection Limit" msgstr "Connection Limit" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Connections" @@ -805,6 +829,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -844,6 +871,9 @@ msgstr "Delete" msgid "Delete this network" msgstr "Delete this network" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Description" @@ -862,10 +892,10 @@ msgstr "Device Configuration" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -891,15 +921,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Disabled" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1190,6 +1229,9 @@ msgstr "Filter private" msgid "Filter useless" msgstr "Filter useless" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1243,6 +1285,9 @@ msgstr "" msgid "Force" msgstr "Force" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1305,6 +1350,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1377,9 +1425,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "Hide ESSID" @@ -1395,6 +1440,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "Host-IP or Network" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Hostname" @@ -1416,6 +1464,12 @@ msgstr "" msgid "IP address" msgstr "IP address" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1584,6 +1638,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Initscript" @@ -1620,21 +1677,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "Interfaces" @@ -1823,6 +1871,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1887,6 +1938,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1902,6 +1956,9 @@ msgstr "MAC-List" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1981,6 +2038,9 @@ msgstr "" msgid "Modem device" msgstr "Modem device" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2078,6 +2138,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2099,6 +2162,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2117,6 +2183,9 @@ msgstr "" msgid "No rules in this chain" msgstr "No rules in this chain" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2251,6 +2320,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2329,6 +2401,9 @@ msgstr "PID" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2416,6 +2491,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2484,9 +2562,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Prevents client-to-client communication" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2535,6 +2610,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2553,9 +2633,6 @@ msgstr "RX" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2574,6 +2651,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2594,16 +2674,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2649,9 +2719,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "References" @@ -2740,6 +2807,12 @@ msgstr "Restart" msgid "Restart Firewall" msgstr "Restart Firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "Restore backup" @@ -2828,6 +2901,9 @@ msgstr "Save & Apply" msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Scheduled Tasks" @@ -2868,6 +2944,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2877,15 +2959,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "Signal" @@ -2981,6 +3063,9 @@ msgstr "Start priority" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3127,6 +3212,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3323,8 +3411,12 @@ msgstr "Timezone" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" +"To restore configuration files, you can upload a previously generated backup " +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgid "Tone" msgstr "" @@ -3392,9 +3484,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3404,6 +3514,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3413,6 +3526,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Unsaved Changes" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3549,6 +3668,9 @@ msgstr "" msgid "Version" msgstr "Version" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3618,7 +3740,10 @@ msgstr "Wireless Overview" msgid "Wireless Security" msgstr "Wireless Security" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3630,12 +3755,6 @@ msgstr "" msgid "Wireless network is enabled" msgstr "" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3740,6 +3859,9 @@ msgstr "local DNS file" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "" @@ -3815,6 +3937,12 @@ msgstr "" msgid "« Back" msgstr "« Back" +#~ msgid "Activate this network" +#~ msgstr "Activate this network" + +#~ msgid "Backup / Restore" +#~ msgstr "Backup / Restore" + #~ msgid "DHCP Leases" #~ msgstr "DHCP Leases" diff --git a/luci-base/po/es/base.po b/luci-base/po/es/base.po index 66b314545..2c1459b66 100644 --- a/luci-base/po/es/base.po +++ b/luci-base/po/es/base.po @@ -160,9 +160,6 @@ msgstr "Tamaño máximo de paquetes EDNS0" msgid "Max. concurrent queries" msgstr "Máximo número de consultas concurrentes" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -222,9 +219,6 @@ msgstr "Punto de Acceso" msgid "Actions" msgstr "Acciones" -msgid "Activate this network" -msgstr "Activar esta red" - msgid "Active IPv4-Routes" msgstr "Rutas activas IPv4" @@ -278,6 +272,18 @@ msgstr "" msgid "Alert" msgstr "Alerta" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -291,6 +297,9 @@ msgstr "" "Permitir autenticación de contraseña via SSH" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Permitir a todos excepto a los de la lista" @@ -323,6 +332,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -499,12 +513,12 @@ msgstr "Volver al resumen" msgid "Back to scan results" msgstr "Volver a resultados de la exploración" +msgid "Backup" +msgstr "Salvar" + msgid "Backup / Flash Firmware" msgstr "Copia de seguridad / Grabar firmware" -msgid "Backup / Restore" -msgstr "Salvar / Restaurar" - msgid "Backup file list" msgstr "Salvar lista de ficheros" @@ -514,6 +528,9 @@ msgstr "¡Dirección no válida!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -571,6 +588,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Uso de CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Cancelar" @@ -638,12 +658,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Pulse \"generar archivo\" para descargar un fichero tar con los ficheros de " -"configuración actuales. Para reiniciar el firmware a su estado inicial pulse " -"\"Reiniciar\" (sólo posible con imágenes squashfs)." +"configuración actuales." msgid "Client" msgstr "Cliente" @@ -680,6 +698,9 @@ msgstr "" msgid "Configuration" msgstr "Configuración" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Se mantendrán los ficheros de configuración." @@ -701,6 +722,9 @@ msgstr "Conectado" msgid "Connection Limit" msgstr "Límite de conexión" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Conexiones" @@ -814,6 +838,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -853,6 +880,9 @@ msgstr "Eliminar" msgid "Delete this network" msgstr "Borrar esta red" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Descripción" @@ -871,10 +901,10 @@ msgstr "Configuración del dispositivo" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -902,15 +932,24 @@ msgstr "Desactivar configuración de DNS" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Desactivar" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Descartar respuestas RFC1918 salientes" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1208,6 +1247,9 @@ msgstr "Filtro privado" msgid "Filter useless" msgstr "Filtro inútil" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1261,6 +1303,9 @@ msgstr "Grabando..." msgid "Force" msgstr "Forzar" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Forzar CCMP (AES)" @@ -1324,6 +1369,9 @@ msgstr "Sólo GPRS" msgid "Gateway" msgstr "Pasarela" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Puertos del gateway" @@ -1397,9 +1445,6 @@ msgid "" "authentication." msgstr "Claves públicas SSH. Ponga una por línea." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Controlador inalámbrico 802.11b Hermes" - msgid "Hide ESSID" msgstr "Ocultar ESSID" @@ -1417,6 +1462,9 @@ msgstr "" "Dirección IP de máquina o " "red" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Nombre de máquina" @@ -1438,6 +1486,12 @@ msgstr "" msgid "IP address" msgstr "Dirección IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1613,6 +1667,9 @@ msgstr "Entrantes:" msgid "Info" msgstr "Información" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Nombre del script de inicio" @@ -1649,21 +1706,12 @@ msgstr "Resumen de interfaces" msgid "Interface is reconnecting..." msgstr "Reconectando interfaz..." -msgid "Interface is shutting down..." -msgstr "Parando interfaz..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "El interfaz no existe o no está aún conectado." -msgid "Interface reconnected" -msgstr "Interfaz reconectado" - -msgid "Interface shut down" -msgstr "Interfaz detenido" - msgid "Interfaces" msgstr "Interfaces" @@ -1855,6 +1903,9 @@ msgstr "Carga Media" msgid "Loading" msgstr "Cargando" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1926,6 +1977,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "Dirección cedida más baja como diferencia de la dirección de red." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "Dirección MAC" @@ -1941,6 +1995,9 @@ msgstr "Lista de direcciones MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -2020,6 +2077,9 @@ msgstr "" msgid "Modem device" msgstr "Dispositivo de módem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Espera de inicialización del modem" @@ -2117,6 +2177,9 @@ msgstr "Utilidades de red" msgid "Network boot image" msgstr "Imagen de arranque en red" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Red sin interfaces." @@ -2138,6 +2201,9 @@ msgstr "No se han encontrado ficheros" msgid "No information available" msgstr "No hay información disponible" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Sin caché negativa" @@ -2156,6 +2222,9 @@ msgstr "¡Sin contraseña!" msgid "No rules in this chain" msgstr "No hay reglas en esta cadena" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Sin zona asignada" @@ -2289,6 +2358,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2369,6 +2441,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2456,6 +2531,9 @@ msgstr "Pico:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2526,9 +2604,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Impide la comunicación cliente a cliente" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Controlador inalámbrico 802.11n Prism2/2.5/3" - msgid "Private Key" msgstr "" @@ -2577,6 +2652,11 @@ msgstr "" msgid "Quality" msgstr "Calidad" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2595,9 +2675,6 @@ msgstr "RX" msgid "RX Rate" msgstr "Ratio RX" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Controlador inalámbrico 802.11%s RaLink" - msgid "Radius-Accounting-Port" msgstr "Puerto de contabilidad Radius" @@ -2616,6 +2693,9 @@ msgstr "Secreto de autentificación Radius" msgid "Radius-Authentication-Server" msgstr "Servidor de autentificación Radius" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2639,18 +2719,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "¿Está seguro de querer reiniciar todos los cambios?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"¿Está seguro de apagar la interfaz \"%s\"?.\n" -"Puede perder el acceso a este dispositivo si está conectado por interfaz." - msgid "Really switch protocol?" msgstr "¿Está seguro de querer cambiar el protocolo?" @@ -2696,9 +2764,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Reconectar esta interfaz" -msgid "Reconnecting interface" -msgstr "Reconectando la interfaz" - msgid "References" msgstr "Referencias" @@ -2787,6 +2852,12 @@ msgstr "Rearrancar" msgid "Restart Firewall" msgstr "Rearrancar cortafuegos" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Restaurar" + msgid "Restore backup" msgstr "Restaurar copia de seguridad" @@ -2875,6 +2946,9 @@ msgstr "Guardar y aplicar" msgid "Scan" msgstr "Explorar" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Tareas programadas" @@ -2918,6 +2992,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Sincronización horaria" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Configuración del servidor DHCP" @@ -2927,15 +3007,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Mostrar lista de ficheros a salvar" msgid "Shutdown this interface" msgstr "Apagar esta interfaz" -msgid "Shutdown this network" -msgstr "Apagar esta red" - msgid "Signal" msgstr "Señal" @@ -3039,6 +3119,9 @@ msgstr "Prioridad de arranque" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Arranque" @@ -3202,6 +3285,9 @@ msgstr "" "Los caracteres permitidos son: A-Z, a-z, " "0-9 y _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3423,10 +3509,12 @@ msgstr "Zona horaria" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Para restaurar los ficheros de configuración, debe subir primero una copia " -"de seguridad." +"de seguridad. Para reiniciar el firmware a su estado inicial pulse " +"\"Reiniciar\" (sólo posible con imágenes squashfs)." msgid "Tone" msgstr "" @@ -3494,9 +3582,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "Imposible repartir" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3506,6 +3612,9 @@ msgstr "Desconocido" msgid "Unknown Error, password not changed!" msgstr "Error desconocido, ¡no se ha cambiado la contraseña!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "No gestionado" @@ -3515,6 +3624,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Cambios no guardados" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Tipo de protocolo no soportado." @@ -3658,6 +3773,9 @@ msgstr "Verificar" msgid "Version" msgstr "Versión" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3727,8 +3845,11 @@ msgstr "Redes inalámbricas" msgid "Wireless Security" msgstr "Seguridad inalámbrica" -msgid "Wireless is disabled or not associated" -msgstr "Red inalámbrica desconectada o no asociada" +msgid "Wireless is disabled" +msgstr "Red inalámbrica desconectada" + +msgid "Wireless is not associated" +msgstr "Red inalámbrica no asociada" msgid "Wireless is restarting..." msgstr "Rearrancando red inalámbrica..." @@ -3739,12 +3860,6 @@ msgstr "Red inalámbrica desconectada" msgid "Wireless network is enabled" msgstr "Red inalámbrica conectada" -msgid "Wireless restarted" -msgstr "Red inalámbrica rearrancada" - -msgid "Wireless shut down" -msgstr "Apagando red inalámbrica" - msgid "Write received DNS requests to syslog" msgstr "Escribir las peticiones de DNS recibidas en el registro del sistema" @@ -3851,6 +3966,9 @@ msgstr "Archvo DNS local" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "no" @@ -3926,6 +4044,49 @@ msgstr "sí" msgid "« Back" msgstr "« Volver" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Activar esta red" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Controlador inalámbrico 802.11b Hermes" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Parando interfaz..." + +#~ msgid "Interface reconnected" +#~ msgstr "Interfaz reconectado" + +#~ msgid "Interface shut down" +#~ msgstr "Interfaz detenido" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Controlador inalámbrico 802.11n Prism2/2.5/3" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "Controlador inalámbrico 802.11%s RaLink" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "¿Está seguro de apagar la interfaz \"%s\"?.\n" +#~ "Puede perder el acceso a este dispositivo si está conectado por interfaz." + +#~ msgid "Reconnecting interface" +#~ msgstr "Reconectando la interfaz" + +#~ msgid "Shutdown this network" +#~ msgstr "Apagar esta red" + +#~ msgid "Wireless restarted" +#~ msgstr "Red inalámbrica rearrancada" + +#~ msgid "Wireless shut down" +#~ msgstr "Apagando red inalámbrica" + #~ msgid "DHCP Leases" #~ msgstr "Cesiones DHCP" diff --git a/luci-base/po/fr/base.po b/luci-base/po/fr/base.po index 4176c7f86..56944b263 100644 --- a/luci-base/po/fr/base.po +++ b/luci-base/po/fr/base.po @@ -159,9 +159,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Maximum de requêtes concurrentes" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -225,9 +222,6 @@ msgstr "Point d'accès" msgid "Actions" msgstr "Actions" -msgid "Activate this network" -msgstr "Activer ce réseau" - msgid "Active IPv4-Routes" msgstr "Routes IPv4 actives" @@ -280,6 +274,18 @@ msgstr "" msgid "Alert" msgstr "Alerte" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -293,6 +299,9 @@ msgstr "" "Autoriser l'authentification SSH par mot " "de passe" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Autoriser tout sauf ce qui est listé" @@ -329,6 +338,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -505,12 +519,12 @@ msgstr "Retour à la vue générale" msgid "Back to scan results" msgstr "Retour aux résultats de la recherche" +msgid "Backup" +msgstr "Sauvegarder" + msgid "Backup / Flash Firmware" msgstr "Sauvegarde / Mise à jour du micrologiciel" -msgid "Backup / Restore" -msgstr "Sauvegarder / Restaurer" - msgid "Backup file list" msgstr "Liste des fichiers de sauvegarde" @@ -520,6 +534,9 @@ msgstr "Adresse spécifiée incorrecte!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -576,6 +593,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Utilisation CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Annuler" @@ -644,13 +664,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Cliquer sur \"Construire l'archive\" pour télécharger une archive tar des " -"fichiers de la configuration actuelle. Pour réinitialiser le micrologiciel " -"dans son état initial, cliquer sur \"Réinitialiser\" (possible seulement " -"avec les images de type squashfs)." +"fichiers de la configuration actuelle." msgid "Client" msgstr "Client" @@ -687,6 +704,9 @@ msgstr "" msgid "Configuration" msgstr "Configuration" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Les fichiers de configuration seront préservés." @@ -708,6 +728,9 @@ msgstr "Connecté" msgid "Connection Limit" msgstr "Limite de connexion" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Connexions" @@ -821,6 +844,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -860,6 +886,9 @@ msgstr "Effacer" msgid "Delete this network" msgstr "Supprimer ce réseau" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Description" @@ -878,10 +907,10 @@ msgstr "Configuration de l'équipement" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -909,15 +938,24 @@ msgstr "Désactiver la configuration DNS" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Désactivé" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Jeter les réponses en RFC1918 amont" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1220,6 +1258,9 @@ msgstr "Filtrer les requêtes privées" msgid "Filter useless" msgstr "Filtrer les requêtes inutiles" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1273,6 +1314,9 @@ msgstr "Écriture…" msgid "Force" msgstr "Forcer" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Forcer CCMP (AES)" @@ -1335,6 +1379,9 @@ msgstr "seulement GPRS" msgid "Gateway" msgstr "Passerelle" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Ports de la passerelle" @@ -1411,9 +1458,6 @@ msgstr "" "Vous pouvez copier ici des clés SSH publiques (une par ligne) pour une " "authentification SSH sur clés publiques." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Contrôleur sans fil Hermes 802.11b" - msgid "Hide ESSID" msgstr "Cacher le ESSID" @@ -1429,6 +1473,9 @@ msgstr "Délai d'expiration pour les hôtes" msgid "Host-IP or Network" msgstr "adresse IP ou réseau" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Nom d'hôte" @@ -1450,6 +1497,12 @@ msgstr "" msgid "IP address" msgstr "Adresse IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1621,6 +1674,9 @@ msgstr "Intérieur :" msgid "Info" msgstr "Info" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Script d'initialisation" @@ -1657,21 +1713,12 @@ msgstr "Vue d'ensemble de l'interface" msgid "Interface is reconnecting..." msgstr "L'interface se reconnecte…" -msgid "Interface is shutting down..." -msgstr "L'interface s'arrête…" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "L'interface n'est pas présente ou pas encore connectée." -msgid "Interface reconnected" -msgstr "Interface reconnectée" - -msgid "Interface shut down" -msgstr "Interface arrêtée" - msgid "Interfaces" msgstr "Interfaces" @@ -1867,6 +1914,9 @@ msgstr "Charge moyenne" msgid "Loading" msgstr "Chargement" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1940,6 +1990,9 @@ msgstr "" "Adresse allouée la plus basse, spécifiée par un décalage à partir de " "l'adresse réseau." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "Adresse MAC" @@ -1955,6 +2008,9 @@ msgstr "Liste des adresses MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -2034,6 +2090,9 @@ msgstr "" msgid "Modem device" msgstr "Interface Modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Délai max. d'initialisation du modem" @@ -2131,6 +2190,9 @@ msgstr "Utilitaires réseau" msgid "Network boot image" msgstr "Image de démarrage réseau" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Réseau sans interfaces." @@ -2152,6 +2214,9 @@ msgstr "Aucun fichier trouvé" msgid "No information available" msgstr "Information indisponible" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Pas de cache négatif" @@ -2170,6 +2235,9 @@ msgstr "Pas de mot de passe positionné !" msgid "No rules in this chain" msgstr "Aucune règle dans cette chaîne" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Aucune zone attribuée" @@ -2302,6 +2370,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2382,6 +2453,9 @@ msgstr "PID" msgid "PIN" msgstr "code PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2469,6 +2543,9 @@ msgstr "Pic :" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2539,9 +2616,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Empêche la communication directe entre clients" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Contrôleur sans fil Prism2/2.5/3 802.11b" - msgid "Private Key" msgstr "" @@ -2590,6 +2664,11 @@ msgstr "" msgid "Quality" msgstr "Qualitée" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2608,9 +2687,6 @@ msgstr "Reçu" msgid "RX Rate" msgstr "Débit en réception" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Contrôleur sans fil RaLink 802.11%s" - msgid "Radius-Accounting-Port" msgstr "Port de la comptabilisation Radius" @@ -2629,6 +2705,9 @@ msgstr "Secret de l'authentification Radius" msgid "Radius-Authentication-Server" msgstr "Serveur de l'authentification Radius" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2651,19 +2730,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Voulez-vous vraiment ré-initialiser toutes les modifications ?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Voulez-vous vraiment arrêter l'interface %s ?\n" -"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " -"cette interface." - msgid "Really switch protocol?" msgstr "Voulez-vous vraiment changer de protocole ?" @@ -2709,9 +2775,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Reconnecter cet interface" -msgid "Reconnecting interface" -msgstr "Reconnecte cet interface" - msgid "References" msgstr "Références" @@ -2800,6 +2863,12 @@ msgstr "Redémarrer" msgid "Restart Firewall" msgstr "Redémarrer le pare-feu" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Restaurer" + msgid "Restore backup" msgstr "Restaurer une sauvegarde" @@ -2889,6 +2958,9 @@ msgstr "Sauvegarder et Appliquer" msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Tâches Régulières" @@ -2932,6 +3004,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Configurer la synchronisation de l'heure" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Configurer le serveur DHCP" @@ -2941,15 +3019,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Afficher la liste des fichiers de la sauvegarde actuelle" msgid "Shutdown this interface" msgstr "Arrêter cet interface" -msgid "Shutdown this network" -msgstr "Arrêter ce réseau" - msgid "Signal" msgstr "Signal" @@ -3051,6 +3129,9 @@ msgstr "Priorité de démarrage" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Démarrage" @@ -3214,6 +3295,9 @@ msgstr "" "Les caractères autorisés sont : A-Z, a-z, " "0-9 et _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3441,10 +3525,13 @@ msgstr "Fuseau horaire" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Pour restaurer les fichiers de configuration, vous pouvez charger ici une " -"archive de sauvegarde construite précédemment." +"archive de sauvegarde construite précédemment. Pour réinitialiser le " +"micrologiciel dans son état initial, cliquer sur \"Réinitialiser\" (possible " +"seulement avec les images de type squashfs)." msgid "Tone" msgstr "" @@ -3512,9 +3599,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "Impossible d'envoyer" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3524,6 +3629,9 @@ msgstr "Inconnu" msgid "Unknown Error, password not changed!" msgstr "Erreur inconnue, mot de passe inchangé !" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "non-géré" @@ -3533,6 +3641,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Changements non appliqués" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Type de protocole non pris en charge." @@ -3677,6 +3791,9 @@ msgstr "Vérifier" msgid "Version" msgstr "Version" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3746,8 +3863,11 @@ msgstr "Présentation des réseaux sans-fil" msgid "Wireless Security" msgstr "Sécurité des réseaux sans-fil" -msgid "Wireless is disabled or not associated" -msgstr "Le Wi-Fi est désactivé ou non associé" +msgid "Wireless is disabled" +msgstr "Le Wi-Fi est désactivé" + +msgid "Wireless is not associated" +msgstr "Le Wi-Fi est non associé" msgid "Wireless is restarting..." msgstr "Le Wi-Fi est ré-initialisé…" @@ -3758,12 +3878,6 @@ msgstr "Le réseau Wi-Fi est désactivé" msgid "Wireless network is enabled" msgstr "Le réseau Wi-Fi est activé" -msgid "Wireless restarted" -msgstr "Wi-Fi ré-initialisé" - -msgid "Wireless shut down" -msgstr "Wi-Fi arrêté" - msgid "Write received DNS requests to syslog" msgstr "Écrire les requêtes DNS reçues dans syslog" @@ -3869,6 +3983,9 @@ msgstr "fichier de résolution local" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "non" @@ -3944,6 +4061,50 @@ msgstr "oui" msgid "« Back" msgstr "« Retour" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Activer ce réseau" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Contrôleur sans fil Hermes 802.11b" + +#~ msgid "Interface is shutting down..." +#~ msgstr "L'interface s'arrête…" + +#~ msgid "Interface reconnected" +#~ msgstr "Interface reconnectée" + +#~ msgid "Interface shut down" +#~ msgstr "Interface arrêtée" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Contrôleur sans fil Prism2/2.5/3 802.11b" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "Contrôleur sans fil RaLink 802.11%s" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Voulez-vous vraiment arrêter l'interface %s ?\n" +#~ "Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " +#~ "cette interface." + +#~ msgid "Reconnecting interface" +#~ msgstr "Reconnecte cet interface" + +#~ msgid "Shutdown this network" +#~ msgstr "Arrêter ce réseau" + +#~ msgid "Wireless restarted" +#~ msgstr "Wi-Fi ré-initialisé" + +#~ msgid "Wireless shut down" +#~ msgstr "Wi-Fi arrêté" + #~ msgid "DHCP Leases" #~ msgstr "Baux DHCP" diff --git a/luci-base/po/he/base.po b/luci-base/po/he/base.po index 437127fd6..dee9e73e5 100644 --- a/luci-base/po/he/base.po +++ b/luci-base/po/he/base.po @@ -149,9 +149,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -213,9 +210,6 @@ msgstr "נקודת גישה" msgid "Actions" msgstr "פעולות" -msgid "Activate this network" -msgstr "הפעל רשת זו" - msgid "Active IPv4-Routes" msgstr "" @@ -272,6 +266,18 @@ msgstr "" msgid "Alert" msgstr "אזעקה" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -283,6 +289,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + #, fuzzy msgid "Allow all except listed" msgstr "אפשר הכל חוץ מהרשומים" @@ -316,6 +325,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -494,12 +508,12 @@ msgstr "חזרה לסקירה" msgid "Back to scan results" msgstr "חזרה לתוצאות סריקה" +msgid "Backup" +msgstr "גיבוי" + msgid "Backup / Flash Firmware" msgstr "גיבוי / קושחת פלאש" -msgid "Backup / Restore" -msgstr "גיבוי / שחזור" - msgid "Backup file list" msgstr "גיבוי רשימת קבצים" @@ -509,6 +523,9 @@ msgstr "פורטה כתובת לא תקינה" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -566,6 +583,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "שימוש מעבד (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "בטל" @@ -627,8 +647,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -664,6 +683,9 @@ msgstr "" msgid "Configuration" msgstr "הגדרות" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "קבצי ההגדרות ישמרו." @@ -685,6 +707,9 @@ msgstr "מחובר" msgid "Connection Limit" msgstr "מגבלת חיבורים" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "חיבורים" @@ -798,6 +823,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -836,6 +864,9 @@ msgstr "למחוק" msgid "Delete this network" msgstr "מחק רשת זו" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "תיאור" @@ -854,10 +885,10 @@ msgstr "הגדרות מכשיר" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -883,15 +914,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1175,6 +1215,9 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1228,6 +1271,9 @@ msgstr "" msgid "Force" msgstr "" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1290,6 +1336,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1360,9 +1409,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "" @@ -1378,6 +1424,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "" @@ -1399,6 +1448,12 @@ msgstr "" msgid "IP address" msgstr "" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1562,6 +1617,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "" @@ -1598,21 +1656,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "" @@ -1798,6 +1847,9 @@ msgstr "עומס ממוצע" msgid "Loading" msgstr "טוען" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1862,6 +1914,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1877,6 +1932,9 @@ msgstr "" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1956,6 +2014,9 @@ msgstr "" msgid "Modem device" msgstr "" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2051,6 +2112,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2072,6 +2136,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2090,6 +2157,9 @@ msgstr "לא הוגדרה סיסמה!" msgid "No rules in this chain" msgstr "" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2218,6 +2288,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2296,6 +2369,9 @@ msgstr "" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2383,6 +2459,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2451,9 +2530,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2502,6 +2578,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2520,9 +2601,6 @@ msgstr "" msgid "RX Rate" msgstr "קצב קליטה" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2541,6 +2619,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2559,16 +2640,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2614,9 +2685,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "" @@ -2705,6 +2773,12 @@ msgstr "" msgid "Restart Firewall" msgstr "" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "שחזור" + msgid "Restore backup" msgstr "" @@ -2791,6 +2865,9 @@ msgstr "" msgid "Scan" msgstr "" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "" @@ -2832,6 +2909,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "סנכרון זמן" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2841,15 +2924,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "" @@ -2947,6 +3030,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "אתחול" @@ -3096,6 +3182,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3277,7 +3366,8 @@ msgstr "אזור זמן" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "על מנת לשחזר את קבצי ההגדרות, באפשרותך להעלות ארכיון גיבוי שנוצר לפני כן." @@ -3347,9 +3437,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3359,6 +3467,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3368,6 +3479,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3504,6 +3621,9 @@ msgstr "" msgid "Version" msgstr "גרסה" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "" @@ -3571,7 +3691,10 @@ msgstr "" msgid "Wireless Security" msgstr "" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3583,12 +3706,6 @@ msgstr "רשת אלחוטית מנוטרלת" msgid "Wireless network is enabled" msgstr "רשת אלחוטית מאופשרת" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3688,6 +3805,9 @@ msgstr "" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "לא" @@ -3763,6 +3883,9 @@ msgstr "כן" msgid "« Back" msgstr "<< אחורה" +#~ msgid "Activate this network" +#~ msgstr "הפעל רשת זו" + #~ msgid "DHCP Leases" #~ msgstr "הרשאות DHCP" diff --git a/luci-base/po/hu/base.po b/luci-base/po/hu/base.po index f855fcf06..6dab15caa 100644 --- a/luci-base/po/hu/base.po +++ b/luci-base/po/hu/base.po @@ -156,9 +156,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Max. párhuzamos lekérdezés" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -218,9 +215,6 @@ msgstr "Hozzáférési pont" msgid "Actions" msgstr "Műveletek" -msgid "Activate this network" -msgstr "Hálózat aktiválása" - msgid "Active IPv4-Routes" msgstr "" "Aktív IPv4 útvonalak" @@ -275,6 +269,18 @@ msgstr "" msgid "Alert" msgstr "Riasztás" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -287,6 +293,9 @@ msgid "Allow SSH password authentication" msgstr "" "SSH jelszó hitelesítés engedélyezése" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Összes engedélyezése a felsoroltakon kívül" @@ -322,6 +331,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -498,12 +512,12 @@ msgstr "Vissza az áttekintéshez" msgid "Back to scan results" msgstr "Vissza a felderítési eredményekhez" +msgid "Backup" +msgstr "Mentés" + msgid "Backup / Flash Firmware" msgstr "Mentés / Firmware frissítés" -msgid "Backup / Restore" -msgstr "Mentés / Visszaállítás" - msgid "Backup file list" msgstr "Mentési fájl lista" @@ -513,6 +527,9 @@ msgstr "Hibás címet adott meg!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -570,6 +587,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Processzor használat (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Mégsem" @@ -639,13 +659,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Kattintson az \"Archívum készítése\" gombra a jelenlegi konfiguráció tar " -"archívumként történő letöltéséhez. A firmware kezdeti állapotának " -"visszaállításához kattintson a \"Visszaállítás végrehajtása\" gombra (csak " -"squashfs image-ek esetén lehetséges)." +"archívumként történő letöltéséhez." msgid "Client" msgstr "Ügyfél" @@ -682,6 +699,9 @@ msgstr "" msgid "Configuration" msgstr "Beállítás" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "A konfigurációs fájlok megmaradnak." @@ -703,6 +723,9 @@ msgstr "Kapcsolódva" msgid "Connection Limit" msgstr "Kapcsolati korlát" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Kapcsolatok" @@ -816,6 +839,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -854,6 +880,9 @@ msgstr "Törlés" msgid "Delete this network" msgstr "Hálózat törlése" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Leírás" @@ -872,10 +901,10 @@ msgstr "Eszköz beállítások" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -903,15 +932,24 @@ msgstr "DNS beállítás letiltása" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Letiltva" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Beérkező RFC1918 DHCP válaszok elvetése. " +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1209,6 +1247,9 @@ msgstr "Privát kérések szűrése" msgid "Filter useless" msgstr "Használhahatlan kérések szűrése" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1262,6 +1303,9 @@ msgstr "Flash-elés..." msgid "Force" msgstr "Kényszerítés" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "CCMP (AES) kényszerítése" @@ -1326,6 +1370,9 @@ msgstr "Csak GPRS" msgid "Gateway" msgstr "Átjáró" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Átjáró portok" @@ -1400,9 +1447,6 @@ msgstr "" "Nyilvános kulcs alapú SSH azonosításhoz itt adhat meg nyilvános SSH " "kulcsokat (soronként egyet)." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b vezeték nélküli vezérlő" - msgid "Hide ESSID" msgstr "ESSID elrejtése" @@ -1418,6 +1462,9 @@ msgstr "Host lejárati idő" msgid "Host-IP or Network" msgstr "Host-IP vagy hálózat" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Gépnév" @@ -1439,6 +1486,12 @@ msgstr "" msgid "IP address" msgstr "IP cím" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1611,6 +1664,9 @@ msgstr "Bejövő" msgid "Info" msgstr "Információk" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Indítási állomány" @@ -1647,21 +1703,12 @@ msgstr "Interfész áttekintés" msgid "Interface is reconnecting..." msgstr "Interfész újracsatlakoztatása..." -msgid "Interface is shutting down..." -msgstr "Interfész leállítása..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "Az interfész nincs jelen, vagy még nincs csatlakoztatva." -msgid "Interface reconnected" -msgstr "Interfész újracsatlakoztatva" - -msgid "Interface shut down" -msgstr "Interfész leállítás" - msgid "Interfaces" msgstr "Interfészek" @@ -1857,6 +1904,9 @@ msgstr "Átlagos terhelés" msgid "Loading" msgstr "Betöltés" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1929,6 +1979,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "A legalacsonyabb bérleti címnek az interfész címétől való távolsága" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-cím" @@ -1944,6 +1997,9 @@ msgstr "MAC-lista" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -2023,6 +2079,9 @@ msgstr "" msgid "Modem device" msgstr "Modemeszköz" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Modem inicializálás időtúllépés" @@ -2120,6 +2179,9 @@ msgstr "Hálózati eszközök" msgid "Network boot image" msgstr "Hálózati rendszertöltő lemezkép" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Interfészhez nem rendelt hálózat" @@ -2141,6 +2203,9 @@ msgstr "Nem találhatók fájlok" msgid "No information available" msgstr "Nincs elérhető információ" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Nincs negatív gyorsítótár" @@ -2159,6 +2224,9 @@ msgstr "Nincs jelszó!" msgid "No rules in this chain" msgstr "Ez a lánc nem tartalmaz szabályokat" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Nincs hozzárendelt zóna" @@ -2292,6 +2360,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2372,6 +2443,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2459,6 +2533,9 @@ msgstr "Csúcs:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2529,9 +2606,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Ügyfél-ügyfél közötti kommunikáció megakadályozása" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b vezeték nélküli vezérlő" - msgid "Private Key" msgstr "" @@ -2580,6 +2654,11 @@ msgstr "" msgid "Quality" msgstr "Minőség" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2598,9 +2677,6 @@ msgstr "RX" msgid "RX Rate" msgstr "RX sebesség" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s vezeték nélküli vezérlő" - msgid "Radius-Accounting-Port" msgstr "Radius-Naplózási-Port" @@ -2619,6 +2695,9 @@ msgstr "Radius-Hitelesítés-Kulcs" msgid "Radius-Authentication-Server" msgstr "Radius-Hitelesítés-Kiszolgáló" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2642,19 +2721,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Biztos, hogy visszavonja az összes módosítást?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Biztos, hogy leállítja a \"%s\" interfészt?\n" -" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az " -"interfészen keresztül kapcsolódik." - msgid "Really switch protocol?" msgstr "Biztos, hogy cserélni szeretné a protokollt?" @@ -2700,9 +2766,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Csatlakoztassa újra az interfészt" -msgid "Reconnecting interface" -msgstr "Interfész újracsatlakoztatása" - msgid "References" msgstr "Hivatkozások" @@ -2792,6 +2855,12 @@ msgstr "Újraindítás" msgid "Restart Firewall" msgstr "Tűzfal újraindítása" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Visszaállítás" + msgid "Restore backup" msgstr "Biztonsági mentés visszaállítása" @@ -2880,6 +2949,9 @@ msgstr "Mentés & Alkalmazás" msgid "Scan" msgstr "Felderítés" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Ütemezett feladatok" @@ -2923,6 +2995,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Idő szinkronizálás beállítása" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "DHCP kiszolgáló beállítása" @@ -2932,15 +3010,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Mentendő fájlok aktuális listájának megjelenítése" msgid "Shutdown this interface" msgstr "Interfész leállítása" -msgid "Shutdown this network" -msgstr "Hálózat leállítása" - msgid "Signal" msgstr "Jel" @@ -3042,6 +3120,9 @@ msgstr "Indítás prioritása" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Rendszerindítás" @@ -3203,6 +3284,9 @@ msgstr "" "A következő karakterek használhatók: A-Z, a-z, " "0-9 and _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3429,10 +3513,13 @@ msgstr "Időzóna" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Itt tölthet fel egy korábban létrehozott biztonsági mentés archívumot a " -"konfigurációs fájlok visszaállításához." +"konfigurációs fájlok visszaállításához. A firmware kezdeti állapotának " +"visszaállításához kattintson a \"Visszaállítás végrehajtása\" gombra (csak " +"squashfs image-ek esetén lehetséges)." msgid "Tone" msgstr "" @@ -3500,9 +3587,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "Nem indiítható" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3512,6 +3617,9 @@ msgstr "Ismeretlen" msgid "Unknown Error, password not changed!" msgstr "Ismeretlen hiba, a jelszó nem lett megváltoztatva!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Nem kezelt" @@ -3521,6 +3629,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "El nem mentett módosítások" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Nem támogatott protokoll típus." @@ -3664,6 +3778,9 @@ msgstr "Ellenőrzés" msgid "Version" msgstr "Verzió" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3733,8 +3850,11 @@ msgstr "Vezetéknélküli rész áttekintés" msgid "Wireless Security" msgstr "Vezetéknélküli biztonság" -msgid "Wireless is disabled or not associated" -msgstr "Vezetéknélküli hálózat le van tiltva vagy nincs kapcsolódva" +msgid "Wireless is disabled" +msgstr "Vezetéknélküli hálózat le van tiltva" + +msgid "Wireless is not associated" +msgstr "Vezetéknélküli hálózat nincs kapcsolódva" msgid "Wireless is restarting..." msgstr "Vezetéknélküli rész újraindítása folyamatban..." @@ -3745,12 +3865,6 @@ msgstr "Vezetéknélküli hálózat letiltva" msgid "Wireless network is enabled" msgstr "Vezetéknélküli hálózat engedélyezve" -msgid "Wireless restarted" -msgstr "Vezetéknélküli rész újraindítva" - -msgid "Wireless shut down" -msgstr "Vezetéknélküli rész leállítása" - msgid "Write received DNS requests to syslog" msgstr "A kapott DNS kéréseket írja a rendszernaplóba" @@ -3858,6 +3972,9 @@ msgstr "helyi DNS fájl" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "nem" @@ -3933,6 +4050,50 @@ msgstr "igen" msgid "« Back" msgstr "« Vissza" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Hálózat aktiválása" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b vezeték nélküli vezérlő" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Interfész leállítása..." + +#~ msgid "Interface reconnected" +#~ msgstr "Interfész újracsatlakoztatva" + +#~ msgid "Interface shut down" +#~ msgstr "Interfész leállítás" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b vezeték nélküli vezérlő" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s vezeték nélküli vezérlő" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Biztos, hogy leállítja a \"%s\" interfészt?\n" +#~ " Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az " +#~ "interfészen keresztül kapcsolódik." + +#~ msgid "Reconnecting interface" +#~ msgstr "Interfész újracsatlakoztatása" + +#~ msgid "Shutdown this network" +#~ msgstr "Hálózat leállítása" + +#~ msgid "Wireless restarted" +#~ msgstr "Vezetéknélküli rész újraindítva" + +#~ msgid "Wireless shut down" +#~ msgstr "Vezetéknélküli rész leállítása" + #~ msgid "DHCP Leases" #~ msgstr "DHCP bérletek" diff --git a/luci-base/po/it/base.po b/luci-base/po/it/base.po index c975295b3..fb89e8eca 100644 --- a/luci-base/po/it/base.po +++ b/luci-base/po/it/base.po @@ -161,9 +161,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Max. Richiesta in uso" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -225,9 +222,6 @@ msgstr "Punto di Accesso" msgid "Actions" msgstr "Azioni" -msgid "Activate this network" -msgstr "Attiva questa rete" - msgid "Active IPv4-Routes" msgstr "" "Instradamento IPv4 " @@ -284,6 +278,18 @@ msgstr "" msgid "Alert" msgstr "Allerta" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -297,6 +303,9 @@ msgstr "" "Permetti autenticazione SSH tramite " "password" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Consenti tutti tranne quelli nell'elenco" @@ -331,6 +340,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -507,12 +521,12 @@ msgstr "Ritorna alla panoramica" msgid "Back to scan results" msgstr "Ritorno ai risultati della scansione" +msgid "Backup" +msgstr "Copia di Sicurezza" + msgid "Backup / Flash Firmware" msgstr "Copia di Sicurezza / Flash Firmware" -msgid "Backup / Restore" -msgstr "Copia di Sicurezza / Ripristina" - msgid "Backup file list" msgstr "Elenco dei file di cui effettuare una copia di sicurezza" @@ -522,6 +536,9 @@ msgstr "E' stato specificato un indirizzo errato!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -578,6 +595,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Uso CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Annulla" @@ -645,12 +665,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Premi su \"Genera archivio\" per scaricare un archivio tar di backup dei " -"file di configurazione attuali. Per ripristinare il firmware al suo stato " -"iniziale premi \"Esegui Ripristino\" (solo per firmware basati su squashfs)." +"file di configurazione attuali." msgid "Client" msgstr "Cliente" @@ -687,6 +705,9 @@ msgstr "" msgid "Configuration" msgstr "Configurazione" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "I file di configurazione verranno mantenuti." @@ -708,6 +729,9 @@ msgstr "Connesso" msgid "Connection Limit" msgstr "Limite connessioni" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Connessioni" @@ -821,6 +845,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -860,6 +887,9 @@ msgstr "Elimina" msgid "Delete this network" msgstr "Rimuovi questa rete" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Descrizione" @@ -878,10 +908,10 @@ msgstr "Configurazione del dispositivo" msgid "Device is rebooting..." msgstr "Dispositivo in riavvio..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Dispositivo irraggiungibile" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -909,15 +939,24 @@ msgstr "Disabilita il setup dei DNS" msgid "Disable Encryption" msgstr "Disabilita Crittografia" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Disabilitato" msgid "Disabled (default)" msgstr "Disabilitato (default)" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Ignora risposte RFC1918 upstream" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1213,6 +1252,9 @@ msgstr "Filtra privati" msgid "Filter useless" msgstr "Filtra inutili" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1266,6 +1308,9 @@ msgstr "Flashing..." msgid "Force" msgstr "Forza" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Forza CCMP (AES)" @@ -1328,6 +1373,9 @@ msgstr "Solo GPRS" msgid "Gateway" msgstr "Gateway" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Porte Gateway" @@ -1404,9 +1452,6 @@ msgstr "" "Qui è possibile incollare le chiavi pubbliche SSH (uno per riga) per " "l'autenticazione con chiave pubblica SSH." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Dispositivo Wireless Hermes 802.11b" - msgid "Hide ESSID" msgstr "Nascondi ESSID" @@ -1423,6 +1468,9 @@ msgid "Host-IP or Network" msgstr "" "IP dell'host o rete" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Hostname" @@ -1444,6 +1492,12 @@ msgstr "Indirizzi IP" msgid "IP address" msgstr "Indirizzo IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1618,6 +1672,9 @@ msgstr "In entrata:" msgid "Info" msgstr "Informazioni" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Script di avvio" @@ -1654,21 +1711,12 @@ msgstr "Riassunto Interfaccia" msgid "Interface is reconnecting..." msgstr "L'interfaccia si sta ricollegando..." -msgid "Interface is shutting down..." -msgstr "L'intefaccia si sta spegnendo..." - msgid "Interface name" msgstr "Nome Interfaccia" msgid "Interface not present or not connected yet." msgstr "Interfaccia non presente o non ancora connessa." -msgid "Interface reconnected" -msgstr "Interfaccia ricollegata." - -msgid "Interface shut down" -msgstr "Interfaccia spenta" - msgid "Interfaces" msgstr "Interfacce" @@ -1859,6 +1907,9 @@ msgstr "Carico Medio" msgid "Loading" msgstr "Caricamento" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1929,6 +1980,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1944,6 +1998,9 @@ msgstr "Lista MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -2023,6 +2080,9 @@ msgstr "Modello" msgid "Modem device" msgstr "Dispositivo modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2120,6 +2180,9 @@ msgstr "Utilità di Rete" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Rete senza interfaccia" @@ -2141,6 +2204,9 @@ msgstr "Nessun file trovato" msgid "No information available" msgstr "Nessuna informazione disponibile" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2159,6 +2225,9 @@ msgstr "Nessuna password immessa!" msgid "No rules in this chain" msgstr "Nessuna regola in questa catena" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Nessuna zona assegnata" @@ -2292,6 +2361,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2372,6 +2444,9 @@ msgstr "PID" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2459,6 +2534,9 @@ msgstr "Picco:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2527,9 +2605,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Impedisci la comunicazione fra Client" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2578,6 +2653,11 @@ msgstr "" msgid "Quality" msgstr "Qualità" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2596,9 +2676,6 @@ msgstr "" msgid "RX Rate" msgstr "Velocità RX" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2617,6 +2694,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2640,18 +2720,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Azzerare veramente tutte le modifiche?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Vuoi davvero spegnere questa interfaccia \"%s\"? Potresti perdere l'accesso " -"a questo router se stai usando questa interfaccia." - msgid "Really switch protocol?" msgstr "Cambiare veramente il protocollo?" @@ -2697,9 +2765,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Ricollega questa interfaccia" -msgid "Reconnecting interface" -msgstr "Sto ricollegando l'interfaccia" - msgid "References" msgstr "Riferimenti" @@ -2788,6 +2853,12 @@ msgstr "Riavvia" msgid "Restart Firewall" msgstr "Riavvia Firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Ripristina" + msgid "Restore backup" msgstr "Ripristina backup" @@ -2876,6 +2947,9 @@ msgstr "Salva & applica" msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Operazioni programmate" @@ -2916,6 +2990,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2925,15 +3005,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "Segnale" @@ -3037,6 +3117,9 @@ msgstr "Priorità di avvio" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Avvio" @@ -3198,6 +3281,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3395,10 +3481,12 @@ msgstr "Fuso orario" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Per ripristinare i file configurazione, puoi inviare un archivio di backup " -"generato precedentemente qui." +"generato precedentemente qui. Per ripristinare il firmware al suo stato " +"iniziale premi \"Esegui Ripristino\" (solo per firmware basati su squashfs)." msgid "Tone" msgstr "" @@ -3466,9 +3554,27 @@ msgstr "Porte USB" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3478,6 +3584,9 @@ msgstr "Sconosciuto" msgid "Unknown Error, password not changed!" msgstr "Errore sconosciuto, password non cambiata!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Non gestito" @@ -3487,6 +3596,12 @@ msgstr "Smonta" msgid "Unsaved Changes" msgstr "Modifiche non salvate" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Tipo protocollo non supportato." @@ -3632,6 +3747,9 @@ msgstr "Verifica" msgid "Version" msgstr "Versione" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3701,8 +3819,11 @@ msgstr "Panoramica Wireless" msgid "Wireless Security" msgstr "Sicurezza Wireless" -msgid "Wireless is disabled or not associated" -msgstr "La rete Wireless è disattivata o non associata" +msgid "Wireless is disabled" +msgstr "La rete Wireless è disattivata" + +msgid "Wireless is not associated" +msgstr "La rete Wireless è non associata" msgid "Wireless is restarting..." msgstr "Riavvio della Wireless..." @@ -3713,12 +3834,6 @@ msgstr "La rete Wireless è disattivata" msgid "Wireless network is enabled" msgstr "La rete wireless è attivata" -msgid "Wireless restarted" -msgstr "Wireless riavviato" - -msgid "Wireless shut down" -msgstr "Wireless spento" - msgid "Write received DNS requests to syslog" msgstr "Scrittura delle richiesta DNS ricevute nel syslog" @@ -3827,6 +3942,9 @@ msgstr "File DNS locale" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "no" @@ -3902,6 +4020,40 @@ msgstr "Sì" msgid "« Back" msgstr "« Indietro" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Attiva questa rete" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Dispositivo Wireless Hermes 802.11b" + +#~ msgid "Interface is shutting down..." +#~ msgstr "L'intefaccia si sta spegnendo..." + +#~ msgid "Interface reconnected" +#~ msgstr "Interfaccia ricollegata." + +#~ msgid "Interface shut down" +#~ msgstr "Interfaccia spenta" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Vuoi davvero spegnere questa interfaccia \"%s\"? Potresti perdere " +#~ "l'accesso a questo router se stai usando questa interfaccia." + +#~ msgid "Reconnecting interface" +#~ msgstr "Sto ricollegando l'interfaccia" + +#~ msgid "Wireless restarted" +#~ msgstr "Wireless riavviato" + +#~ msgid "Wireless shut down" +#~ msgstr "Wireless spento" + #~ msgid "DHCP Leases" #~ msgstr "Contratti DHCP" @@ -3909,28 +4061,15 @@ msgstr "« Indietro" #~ msgstr "Contratti DHCPv6" #~ msgid "" -#~ "Really delete this interface? The deletion cannot be undone! You might " -#~ "lose access to this device if you are connected via this interface." +#~ "Really shut down network?\\nYou might lose access to this device if you " +#~ "are connected via this interface." #~ msgstr "" -#~ "Vuoi davvero rimuovere questa interfaccia? La rimozione non può essere " -#~ "ripristinata! Potresti perdere l'accesso a questo dispositivo se sei " -#~ "connesso con questa rete." - -#~ msgid "" -#~ "Really shut down network? You might lose access to this device if you are " -#~ "connected via this interface." -#~ msgstr "" -#~ "Vuoi davvero spegnere questa interfaccia? Potresti perdere l'accesso a " +#~ "Vuoi davvero spegnere questa interfaccia?\\nPotresti perdere l'accesso a " #~ "questo router se sei connesso usando questa interfaccia." -#~ msgid "Sort" -#~ msgstr "Ordina" - -#~ msgid "help" -#~ msgstr "aiuto" - -#~ msgid "IPv4 WAN Status" -#~ msgstr "Stato WAN IPv4" - -#~ msgid "IPv6 WAN Status" -#~ msgstr "Stato WAN IPv6" +#~ msgid "" +#~ "Really shutdown interface \"%s\" ?\\nYou might lose access to this device " +#~ "if you are connected via this interface." +#~ msgstr "" +#~ "Vuoi davvero spegnere questa interfaccia \"%s\" ?\\nPotresti perdere " +#~ "l'accesso a questo router se stai usando questa interfaccia." diff --git a/luci-base/po/ja/base.po b/luci-base/po/ja/base.po index 1408c07f2..e1610d09b 100644 --- a/luci-base/po/ja/base.po +++ b/luci-base/po/ja/base.po @@ -3,14 +3,14 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2018-06-01 02:42+0900\n" +"PO-Revision-Date: 2018-07-20 15:27+0900\n" "Last-Translator: INAGAKI Hiroshi \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.0.7\n" +"X-Generator: Poedit 2.0.8\n" "Language-Team: \n" msgid "%.1f dB" @@ -50,7 +50,7 @@ msgid "-- match by uuid --" msgstr "-- UUID を指定 --" msgid "-- please select --" -msgstr "" +msgstr "-- 選択してください --" msgid "1 Minute Load:" msgstr "過去1分の負荷:" @@ -159,9 +159,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "最大 並列処理クエリ" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -220,9 +217,6 @@ msgstr "アクセスポイント" msgid "Actions" msgstr "動作" -msgid "Activate this network" -msgstr "このネットワークを有効にする" - msgid "Active IPv4-Routes" msgstr "" "稼働中の IPv4-経路情報" @@ -278,6 +272,18 @@ msgstr "" msgid "Alert" msgstr "警告" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "全てのサーバー" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -289,11 +295,14 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "SSH パスワード認証を許可します。" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "AP モード動作時に、低 ACK(確認応答)状態の STA の切断を許可します。" + msgid "Allow all except listed" msgstr "リスト内の端末からのアクセスを禁止" msgid "Allow legacy 802.11b rates" -msgstr "" +msgstr "レガシー 802.11b レートを許可" msgid "Allow listed only" msgstr "リスト内の端末からのアクセスを許可" @@ -319,7 +328,14 @@ msgid "Allowed IPs" msgstr "許可されるIP" msgid "Always announce default router" -msgstr "常にデフォルト ルーターとして通知する" +msgstr "常にデフォルト ルーターを通知する" + +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" +"セカンダリ チャンネルの重複にかかわらず、常に 40MHz チャンネルを使用します。" +"このオプションの使用は、 IEEE 802.11n-2009 に準拠しません!" msgid "Annex" msgstr "" @@ -419,7 +435,7 @@ msgid "" msgstr "" msgid "Associated Stations" -msgstr "認証済み端末" +msgstr "アソシエーション済み端末" msgid "Associations" msgstr "アソシエーション数" @@ -499,12 +515,12 @@ msgstr "概要へ戻る" msgid "Back to scan results" msgstr "スキャン結果へ戻る" +msgid "Backup" +msgstr "バックアップ" + msgid "Backup / Flash Firmware" msgstr "バックアップ / ファームウェア更新" -msgid "Backup / Restore" -msgstr "バックアップ / 復元" - msgid "Backup file list" msgstr "バックアップファイル リスト" @@ -514,6 +530,9 @@ msgstr "無効なアドレスです!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "ビーコン間隔" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -573,6 +592,9 @@ msgstr "CA証明書(空白の場合、初回の接続後に保存されます msgid "CPU usage (%)" msgstr "CPU使用率 (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "キャンセル" @@ -643,13 +665,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "\"バックアップ アーカイブの作成\"をクリックすると、現在の設定ファイルをtar形" -"式のアーカイブファイルとしてダウンロードします。設定のリセットを行う場" -"合、\"設定リセット\"をクリックしてください。(ただし、squashfsをお使いの場合の" -"み使用可能です)" +"式のアーカイブファイルとしてダウンロードします。" msgid "Client" msgstr "クライアント" @@ -690,6 +709,9 @@ msgstr "" msgid "Configuration" msgstr "設定" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "設定ファイルは保持されます。" @@ -711,6 +733,9 @@ msgstr "接続中" msgid "Connection Limit" msgstr "接続制限" +msgid "Connection attempt failed" +msgstr "接続の試行が失敗しました" + msgid "Connections" msgstr "ネットワーク接続" @@ -831,6 +856,9 @@ msgstr "DSL ステータス" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "DTIM インターバル" + msgid "DUID" msgstr "DUID" @@ -869,6 +897,9 @@ msgstr "削除" msgid "Delete this network" msgstr "ネットワークを削除します" +msgid "Delivery Traffic Indication Message Interval" +msgstr "Delivery Traffic Indication Message インターバル" + msgid "Description" msgstr "詳細" @@ -887,11 +918,11 @@ msgstr "デバイス設定" msgid "Device is rebooting..." msgstr "デバイスを再起動中です..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "デバイスに到達できません" -msgid "Device unreachable!" -msgstr "デバイスに到達できません!" +msgid "Device unreachable! Still waiting for device..." +msgstr "デバイスに到達できません!まだデバイスを待っています..." msgid "Diagnostics" msgstr "診断機能" @@ -918,15 +949,24 @@ msgstr "DNSセットアップを無効にする" msgid "Disable Encryption" msgstr "暗号化を無効にする" +msgid "Disable this network" +msgstr "このネットワークを無効化" + msgid "Disabled" msgstr "無効" msgid "Disabled (default)" msgstr "無効(デフォルト)" +msgid "Disassociate On Low Acknowledgement" +msgstr "低 Acknowledgement 時のアソシエーション解除" + msgid "Discard upstream RFC1918 responses" msgstr "RFC1918の応答を破棄します" +msgid "Disconnection attempt failed" +msgstr "切断の試行が失敗しました" + msgid "Dismiss" msgstr "警告の除去" @@ -983,7 +1023,7 @@ msgstr "" "Name System\">DNS
      リクエストを転送しません" msgid "Down" -msgstr "" +msgstr "下へ" msgid "Download and install package" msgstr "パッケージのダウンロードとインストール" @@ -1034,6 +1074,8 @@ msgid "" "Edit the raw configuration data above to fix any error and hit \"Save\" to " "reload the page." msgstr "" +"上記の設定データを直接編集してエラーを修正し、 \"保存\" ボタンを押してこの" +"ページをリロードします。" msgid "Edit this interface" msgstr "インターフェースを編集" @@ -1103,7 +1145,7 @@ msgid "Enable this mount" msgstr "マウント設定を有効にする" msgid "Enable this network" -msgstr "" +msgstr "このネットワークを有効化" msgid "Enable this swap" msgstr "スワップ設定を有効にする" @@ -1121,6 +1163,8 @@ msgid "" "Enables fast roaming among access points that belong to the same Mobility " "Domain" msgstr "" +"同一のモビリティ ドメイン(モビリティ グループ)に属するアクセスポイント間の" +"高速ローミングを有効にします。" msgid "Enables the Spanning Tree Protocol on this bridge" msgstr "スパニングツリー プロトコルを有効にする" @@ -1138,10 +1182,10 @@ msgid "Endpoint Port" msgstr "エンドポイント ポート" msgid "Enter custom value" -msgstr "" +msgstr "カスタム値を入力" msgid "Enter custom values" -msgstr "" +msgstr "カスタム値を入力" msgid "Erasing..." msgstr "消去中..." @@ -1224,6 +1268,9 @@ msgstr "プライベートフィルター" msgid "Filter useless" msgstr "" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1279,6 +1326,9 @@ msgstr "更新中..." msgid "Force" msgstr "強制" +msgid "Force 40MHz mode" +msgstr "強制 40MHz モード" + msgid "Force CCMP (AES)" msgstr "CCMP (AES) を使用" @@ -1344,6 +1394,9 @@ msgstr "GPRSのみ" msgid "Gateway" msgstr "ゲートウェイ" +msgid "Gateway address is invalid" +msgstr "無効なゲートウェイ アドレスです" + msgid "Gateway ports" msgstr "ゲートウェイ ポート" @@ -1415,9 +1468,6 @@ msgid "" "authentication." msgstr "SSH公開鍵認証で使用するSSH公開鍵を1行づつペーストしてください。" -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b 無線LANコントローラ" - msgid "Hide ESSID" msgstr "ESSIDの隠匿" @@ -1434,6 +1484,9 @@ msgid "Host-IP or Network" msgstr "" "ホストIP または ネットワーク" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "ホスト名" @@ -1455,6 +1508,12 @@ msgstr "IPアドレス" msgid "IP address" msgstr "IPアドレス" +msgid "IP address in invalid" +msgstr "無効な IP アドレスです" + +msgid "IP address is missing" +msgstr "IP アドレスがありません" + msgid "IPv4" msgstr "IPv4" @@ -1626,6 +1685,9 @@ msgstr "受信:" msgid "Info" msgstr "情報" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "起動スクリプト" @@ -1664,21 +1726,12 @@ msgstr "インターフェース一覧" msgid "Interface is reconnecting..." msgstr "インターフェース再接続中..." -msgid "Interface is shutting down..." -msgstr "インターフェース終了中..." - msgid "Interface name" msgstr "インターフェース名" msgid "Interface not present or not connected yet." msgstr "インターフェースが存在しないか、接続していません" -msgid "Interface reconnected" -msgstr "インターフェースの再接続" - -msgid "Interface shut down" -msgstr "インターフェースの終了" - msgid "Interfaces" msgstr "インターフェース" @@ -1873,6 +1926,9 @@ msgstr "システム平均負荷" msgid "Loading" msgstr "ロード中" +msgid "Local IP address is invalid" +msgstr "無効なローカル IP アドレスです" + msgid "Local IP address to assign" msgstr "割り当てるローカル IPアドレス" @@ -1942,6 +1998,9 @@ msgid "Lowest leased address as offset from the network address." msgstr "" "ネットワークアドレスをオフセットとして、最小のアドレスを設定してください" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-アドレス" @@ -1957,6 +2016,9 @@ msgstr "MAC-リスト" msgid "MAP / LW4over6" msgstr "MAP / LW4over6" +msgid "MAP rule is invalid" +msgstr "無効な MAP ルールです" + msgid "MB/s" msgstr "MB/s" @@ -2028,7 +2090,7 @@ msgid "Missing protocol extension for proto %q" msgstr "プロトコル %qのプロトコル拡張が見つかりません" msgid "Mobility Domain" -msgstr "" +msgstr "モビリティ ドメイン" msgid "Mode" msgstr "モード" @@ -2039,6 +2101,9 @@ msgstr "モデル" msgid "Modem device" msgstr "モデム デバイス" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "モデム初期化タイムアウト" @@ -2083,10 +2148,10 @@ msgid "Mounted file systems" msgstr "マウント中のファイルシステム" msgid "Move down" -msgstr "下へ" +msgstr "下へ移動" msgid "Move up" -msgstr "上へ" +msgstr "上へ移動" msgid "Multicast address" msgstr "マルチキャスト アドレス" @@ -2136,6 +2201,9 @@ msgstr "ネットワーク ユーティリティ" msgid "Network boot image" msgstr "ネットワークブート用イメージ" +msgid "Network device is not present" +msgstr "ネットワーク デバイスが存在しません" + msgid "Network without interfaces." msgstr "インターフェースの無いネットワークです。" @@ -2157,6 +2225,9 @@ msgstr "ファイルが見つかりませんでした" msgid "No information available" msgstr "情報がありません" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "ネガティブキャッシュを行なわない" @@ -2175,6 +2246,9 @@ msgstr "パスワードが設定されていません!" msgid "No rules in this chain" msgstr "チェイン内にルールがありません" +msgid "No scan results available yet..." +msgstr "利用可能なスキャン結果はまだありません..." + msgid "No zone assigned" msgstr "ゾーンが設定されていません" @@ -2311,6 +2385,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2395,6 +2472,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "PIN コードが拒否されました" + msgid "PMK R1 Push" msgstr "" @@ -2482,6 +2562,9 @@ msgstr "ピーク:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "ピアのアドレスがありません" + msgid "Peers" msgstr "ピア" @@ -2552,9 +2635,6 @@ msgstr "これらのインターフェースでの待ち受けを停止します msgid "Prevents client-to-client communication" msgstr "クライアント同士の通信を制限します" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b 無線LANコントローラ" - msgid "Private Key" msgstr "秘密鍵" @@ -2603,6 +2683,13 @@ msgstr "" msgid "Quality" msgstr "クオリティ" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" +"アップストリームの利用可能な全 DNS " +"サーバを問い合わせます" + msgid "R0 Key Lifetime" msgstr "" @@ -2621,9 +2708,6 @@ msgstr "RX" msgid "RX Rate" msgstr "受信レート" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s 無線LANコントローラ" - msgid "Radius-Accounting-Port" msgstr "Radiusアカウントサーバー ポート番号" @@ -2642,6 +2726,9 @@ msgstr "Radius認証秘密鍵" msgid "Radius-Authentication-Server" msgstr "Radius認証サーバー" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2653,6 +2740,10 @@ msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " "access to this device if you are connected via this interface" msgstr "" +"本当にこのインターフェースを削除しますか?一度削除すると、元に戻すことはでき" +"ません!\n" +"もしこのインターフェースを経由して接続している場合、このデバイスにアクセスで" +"きなくなる場合があります" msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2666,19 +2757,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "本当に全ての変更をリセットしますか?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"本当にインターフェース \"%s\" を停止しますか?\n" -"このインターフェースを経由して接続している場合、デバイスにアクセスできなくな" -"る場合があります。" - msgid "Really switch protocol?" msgstr "本当にプロトコルを切り替えますか?" @@ -2724,9 +2802,6 @@ msgstr "WireGuard インターフェースのIPアドレスです。(推奨) msgid "Reconnect this interface" msgstr "インターフェースの再接続" -msgid "Reconnecting interface" -msgstr "インターフェース再接続中" - msgid "References" msgstr "参照カウンタ" @@ -2817,6 +2892,12 @@ msgstr "再起動" msgid "Restart Firewall" msgstr "ファイアウォールの再起動" +msgid "Restart radio interface" +msgstr "無線インターフェースの再起動" + +msgid "Restore" +msgstr "復元" + msgid "Restore backup" msgstr "バックアップから復元する" @@ -2905,6 +2986,9 @@ msgstr "保存 & 適用" msgid "Scan" msgstr "スキャン" +msgid "Scan request failed" +msgstr "スキャン要求が失敗しました" + msgid "Scheduled Tasks" msgstr "スケジュールタスク" @@ -2947,6 +3031,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "時刻同期設定" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "DHCPサーバーを設定" @@ -2956,15 +3046,15 @@ msgstr "" msgid "Short GI" msgstr "Short GI" +msgid "Short Preamble" +msgstr "Short Preamble" + msgid "Show current backup file list" msgstr "現在のバックアップファイルのリストを表示する" msgid "Shutdown this interface" msgstr "インターフェースを終了" -msgid "Shutdown this network" -msgstr "ネットワークを終了" - msgid "Signal" msgstr "信号強度" @@ -3063,6 +3153,9 @@ msgstr "優先順位" msgid "Starting configuration apply…" msgstr "設定の適用を開始しています..." +msgid "Starting wireless scan..." +msgstr "無線LANのスキャンを開始しています..." + msgid "Startup" msgstr "スタートアップ" @@ -3126,6 +3219,8 @@ msgstr "スイッチ %q (%s)" msgid "" "Switch %q has an unknown topology - the VLAN settings might not be accurate." msgstr "" +"スイッチ %q は不明なトポロジを持っています - VLAN 設定は正確ではないかもしれ" +"ません。" msgid "Switch Port Mask" msgstr "スイッチポート マスク" @@ -3221,6 +3316,9 @@ msgstr "" "使用可能な文字は右記の通りです: A-Z, a-z, " "0-9, _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "設定ファイルは以下のエラーにより読み込めませんでした:" @@ -3450,10 +3548,12 @@ msgstr "タイムゾーン" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "設定を復元するには、作成しておいたバックアップ アーカイブをアップロードしてく" -"ださい。" +"ださい。設定のリセットを行う場合、\"設定リセット\"をクリックしてください。(た" +"だし、squashfsをお使いの場合のみ使用可能です)" msgid "Tone" msgstr "" @@ -3521,9 +3621,27 @@ msgstr "USB ポート" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "デバイス名を確定できません" + +msgid "Unable to determine external IP address" +msgstr "外部 IP アドレスを確定できません" + +msgid "Unable to determine upstream interface" +msgstr "アップストリーム インターフェースを確定できません" + msgid "Unable to dispatch" msgstr "ディスパッチできません" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "AFTR ホスト名を解決できません" + +msgid "Unable to resolve peer host name" +msgstr "ピアのホスト名を解決できません" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3533,6 +3651,9 @@ msgstr "不明" msgid "Unknown Error, password not changed!" msgstr "不明なエラーです。パスワードは変更されていません!" +msgid "Unknown error (%s)" +msgstr "不明なエラー (%s)" + msgid "Unmanaged" msgstr "Unmanaged" @@ -3542,11 +3663,17 @@ msgstr "アンマウント" msgid "Unsaved Changes" msgstr "保存されていない変更" +msgid "Unsupported MAP type" +msgstr "非対応の MAP タイプです" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "サポートされていないプロトコルタイプ" msgid "Up" -msgstr "" +msgstr "上へ" msgid "Update lists" msgstr "リストの更新" @@ -3686,6 +3813,9 @@ msgstr "確認" msgid "Version" msgstr "バージョン" +msgid "Virtual dynamic interface" +msgstr "仮想ダイナミックインターフェース" + msgid "WDS" msgstr "WDS" @@ -3756,8 +3886,11 @@ msgstr "無線LANデバイス一覧" msgid "Wireless Security" msgstr "無線LANセキュリティ" -msgid "Wireless is disabled or not associated" -msgstr "無線LAN機能が無効になっているか、アソシエーションされていません" +msgid "Wireless is disabled" +msgstr "無線LAN機能は無効になっています" + +msgid "Wireless is not associated" +msgstr "無線LAN機能がアソシエーションされていません" msgid "Wireless is restarting..." msgstr "無線LAN機能再起動中..." @@ -3768,12 +3901,6 @@ msgstr "無線LAN機能は無効になっています" msgid "Wireless network is enabled" msgstr "無線LAN機能は有効になっています" -msgid "Wireless restarted" -msgstr "無線LAN機能の再起動" - -msgid "Wireless shut down" -msgstr "無線LAN機能停止" - msgid "Write received DNS requests to syslog" msgstr "受信したDNSリクエストをsyslogへ記録します" @@ -3816,7 +3943,7 @@ msgid "bridged" msgstr "ブリッジ" msgid "create" -msgstr "" +msgstr "作成" msgid "create:" msgstr "作成:" @@ -3847,7 +3974,7 @@ msgstr "" "録するファイル" msgid "forward" -msgstr "" +msgstr "転送" msgid "full-duplex" msgstr "全二重" @@ -3882,6 +4009,9 @@ msgstr "ローカル DNSファイル" msgid "minutes" msgstr "分" +msgid "mixed WPA/WPA2" +msgstr "mixed WPA/WPA2" + msgid "no" msgstr "いいえ" @@ -3957,31 +4087,51 @@ msgstr "はい" msgid "« Back" msgstr "« 戻る" -#~ msgid "DHCP Leases" -#~ msgstr "DHCPリース" +#~ msgid "Activate this network" +#~ msgstr "このネットワークを有効にする" -#~ msgid "DHCPv6 Leases" -#~ msgstr "DHCPv6 リース" +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b 無線LANコントローラ" -#~ msgid "" -#~ "Really delete this interface? The deletion cannot be undone! You might " -#~ "lose access to this device if you are connected via this interface." -#~ msgstr "" -#~ "本当にこのインターフェースを削除しますか?一度削除すると、元に戻すことはで" -#~ "きません!\n" -#~ "このインターフェースを経由して接続している場合、デバイスにアクセスできなく" -#~ "なる場合があります。" +#~ msgid "Interface is shutting down..." +#~ msgstr "インターフェース終了中..." + +#~ msgid "Interface reconnected" +#~ msgstr "インターフェースの再接続" + +#~ msgid "Interface shut down" +#~ msgstr "インターフェースの終了" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b 無線LANコントローラ" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s 無線LANコントローラ" #~ msgid "" #~ "Really shut down network? You might lose access to this device if you are " -#~ "connected via this interface." +#~ "connected via this interface" #~ msgstr "" -#~ "本当にネットワークを停止しますか?\n" +#~ "本当にネットワークを停止しますか?\n" #~ "このネットワークを経由して接続している場合、デバイスにアクセスできなくなる" -#~ "場合があります。" +#~ "場合があります" -#~ msgid "Sort" -#~ msgstr "ソート" +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "本当にインターフェース \"%s\" を停止しますか?\n" +#~ "このインターフェースを経由して接続している場合、デバイスにアクセスできなく" +#~ "なる場合があります。" -#~ msgid "help" -#~ msgstr "ヘルプ" +#~ msgid "Reconnecting interface" +#~ msgstr "インターフェース再接続中" + +#~ msgid "Shutdown this network" +#~ msgstr "ネットワークを終了" + +#~ msgid "Wireless restarted" +#~ msgstr "無線LAN機能の再起動" + +#~ msgid "Wireless shut down" +#~ msgstr "無線LAN機能停止" diff --git a/luci-base/po/ko/base.po b/luci-base/po/ko/base.po index e9050ce9b..647d91010 100644 --- a/luci-base/po/ko/base.po +++ b/luci-base/po/ko/base.po @@ -154,9 +154,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "최대 동시 처리 query 수" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -213,9 +210,6 @@ msgstr "" msgid "Actions" msgstr "관리 도구" -msgid "Activate this network" -msgstr "이 네트워를 활성화합니다" - msgid "Active IPv4-Routes" msgstr "" "Active IPv4-Route 경로" @@ -269,6 +263,18 @@ msgstr "" msgid "Alert" msgstr "" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -280,6 +286,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "SSH 암호 인증을 허용합니다" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "" @@ -311,6 +320,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -487,12 +501,12 @@ msgstr "" msgid "Back to scan results" msgstr "" +msgid "Backup" +msgstr "백업" + msgid "Backup / Flash Firmware" msgstr "Firmware 백업 / Flash" -msgid "Backup / Restore" -msgstr "백업 / 복구" - msgid "Backup file list" msgstr "" @@ -502,6 +516,9 @@ msgstr "" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -560,6 +577,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU 사용량 (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "" @@ -627,12 +647,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "현재 설정 파일에 대한 tar 아카이브 다운로드를 원한다면 \"아카이브 생성\" 버튼" -"을 클릭하세요. Firmware 의 초기 설정 reset 을 원한다면 \"Reset 하기\" 를 클" -"릭하세요. (squashfs 이미지들만 가능)." +"을 클릭하세요." msgid "Client" msgstr "" @@ -667,6 +685,9 @@ msgstr "" msgid "Configuration" msgstr "설정" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "" @@ -688,6 +709,9 @@ msgstr "연결 시간" msgid "Connection Limit" msgstr "" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "연결" @@ -803,6 +827,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -842,6 +869,9 @@ msgstr "삭제" msgid "Delete this network" msgstr "이 네트워크를 삭제합니다" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "설명" @@ -860,10 +890,10 @@ msgstr "장치 설정" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -891,15 +921,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1188,6 +1227,9 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1241,6 +1283,9 @@ msgstr "" msgid "Force" msgstr "강제하기" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1303,6 +1348,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1376,9 +1424,6 @@ msgstr "" "아래에 SSH public-key 인증을 위한 공개 SSH-Key 들 (한 줄당 한개) 를 입력할 " "수 있습니다." -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "ESSID 숨기기" @@ -1394,6 +1439,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "Host-IP 혹은 Network" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "호스트이름" @@ -1415,6 +1463,12 @@ msgstr "" msgid "IP address" msgstr "IP 주소" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1578,6 +1632,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "" @@ -1614,21 +1671,12 @@ msgstr "인터페이스 개요" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "인터페이스 이름" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "인터페이스" @@ -1816,6 +1864,9 @@ msgstr "부하 평균" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1880,6 +1931,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "임대되는 주소의 최소 시작점. (네트워크 주소로 부터의 offset)" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-주소" @@ -1895,6 +1949,9 @@ msgstr "" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1974,6 +2031,9 @@ msgstr "모델" msgid "Modem device" msgstr "" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2069,6 +2129,9 @@ msgstr "네트워크 유틸리티" msgid "Network boot image" msgstr "네트워크 boot 이미지" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2090,6 +2153,9 @@ msgstr "" msgid "No information available" msgstr "이용 가능한 정보가 없습니다" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2108,6 +2174,9 @@ msgstr "암호 설정을 해주세요!" msgid "No rules in this chain" msgstr "" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2242,6 +2311,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2322,6 +2394,9 @@ msgstr "" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2409,6 +2484,9 @@ msgstr "최고치:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2477,9 +2555,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2528,6 +2603,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2546,9 +2626,6 @@ msgstr "" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2567,6 +2644,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2587,16 +2667,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "정말 프로토콜 변경을 원하세요?" @@ -2642,9 +2712,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "이 인터페이스를 재연결합니다" -msgid "Reconnecting interface" -msgstr "인터페이스 재연결중입니다" - msgid "References" msgstr "" @@ -2733,6 +2800,12 @@ msgstr "재시작" msgid "Restart Firewall" msgstr "방화벽 재시작" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "복구" + msgid "Restore backup" msgstr "백업 복구" @@ -2821,6 +2894,9 @@ msgstr "저장 & 적용" msgid "Scan" msgstr "Scan 하기" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "작업 관리" @@ -2861,6 +2937,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2870,15 +2952,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "현재 백업 파일 목록 보기" msgid "Shutdown this interface" msgstr "이 인터페이스를 정지합니다" -msgid "Shutdown this network" -msgstr "이 네트워크를 shutdown 합니다" - msgid "Signal" msgstr "신호" @@ -2974,6 +3056,9 @@ msgstr "시작 우선순위" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "시작 프로그램" @@ -3128,6 +3213,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3321,10 +3409,12 @@ msgstr "시간대" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "설정 파일을 복구하고자 한다면 이전에 백업하신 아카이브 파일을 여기로 업로드" -"할 수 있습니다." +"할 수 있습니다. Firmware 의 초기 설정 reset 을 원한다면 \"Reset 하기\" 를 클" +"릭하세요. (squashfs 이미지들만 가능)." msgid "Tone" msgstr "" @@ -3392,9 +3482,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3404,6 +3512,9 @@ msgstr "알수없음" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3413,6 +3524,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "적용 안된 변경 사항" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3557,6 +3674,9 @@ msgstr "" msgid "Version" msgstr "버전" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3624,8 +3744,11 @@ msgstr "무선랜 개요" msgid "Wireless Security" msgstr "무선랜 보안" -msgid "Wireless is disabled or not associated" -msgstr "무선이 비활성화되어 있거나 연결되어 있지 않습니다" +msgid "Wireless is disabled" +msgstr "무선이 비활성화되어" + +msgid "Wireless is not associated" +msgstr "무선이 연결되어 있지 않습니다" msgid "Wireless is restarting..." msgstr "무선랜이 재시작중입니다..." @@ -3636,12 +3759,6 @@ msgstr "무선 네트워크가 꺼져 있음" msgid "Wireless network is enabled" msgstr "무선 네트워크가 켜져 있음" -msgid "Wireless restarted" -msgstr "무선랜이 재시작되었습니다" - -msgid "Wireless shut down" -msgstr "무선랜이 shutdown 되었습니다" - msgid "Write received DNS requests to syslog" msgstr "받은 DNS 요청 내용을 systlog 에 기록합니다" @@ -3747,6 +3864,9 @@ msgstr "local DNS 파일" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "" @@ -3822,6 +3942,21 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "Activate this network" +#~ msgstr "이 네트워를 활성화합니다" + +#~ msgid "Reconnecting interface" +#~ msgstr "인터페이스 재연결중입니다" + +#~ msgid "Shutdown this network" +#~ msgstr "이 네트워크를 shutdown 합니다" + +#~ msgid "Wireless restarted" +#~ msgstr "무선랜이 재시작되었습니다" + +#~ msgid "Wireless shut down" +#~ msgstr "무선랜이 shutdown 되었습니다" + #~ msgid "DHCP Leases" #~ msgstr "DHCP 임대 정보" diff --git a/luci-base/po/ms/base.po b/luci-base/po/ms/base.po index b91eac9df..c183f702e 100644 --- a/luci-base/po/ms/base.po +++ b/luci-base/po/ms/base.po @@ -151,9 +151,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -210,9 +207,6 @@ msgstr "Pusat akses" msgid "Actions" msgstr "Aksi" -msgid "Activate this network" -msgstr "" - msgid "Active IPv4-Routes" msgstr "Aktive IPv4-Routen" @@ -264,6 +258,18 @@ msgstr "" msgid "Alert" msgstr "" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -275,6 +281,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "Membenarkan pengesahan kata laluan SSH" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Izinkan semua kecualian yang disenaraikan" @@ -306,6 +315,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -482,12 +496,12 @@ msgstr "Kembali ke ikhtisar" msgid "Back to scan results" msgstr "Kembali ke keputusan scan" +msgid "Backup" +msgstr "Sandaran" + msgid "Backup / Flash Firmware" msgstr "" -msgid "Backup / Restore" -msgstr "Sandaran / Mengembalikan" - msgid "Backup file list" msgstr "" @@ -497,6 +511,9 @@ msgstr "" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -550,6 +567,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Penggunaan CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Batal" @@ -611,8 +631,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" #, fuzzy @@ -649,6 +668,9 @@ msgstr "" msgid "Configuration" msgstr "Konfigurasi" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "" @@ -670,6 +692,9 @@ msgstr "" msgid "Connection Limit" msgstr "Sambungan Batas" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "" @@ -781,6 +806,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -817,6 +845,9 @@ msgstr "Padam" msgid "Delete this network" msgstr "" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Keterangan" @@ -835,10 +866,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -864,15 +895,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1160,6 +1200,9 @@ msgstr "Penapis swasta" msgid "Filter useless" msgstr "Penapis tak berguna" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1213,6 +1256,9 @@ msgstr "" msgid "Force" msgstr "Paksa" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1275,6 +1321,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1347,9 +1396,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "Menyembunyikan ESSID" @@ -1365,6 +1411,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "IP host atau rangkaian" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Nama Host" @@ -1386,6 +1435,12 @@ msgstr "" msgid "IP address" msgstr "Alamat IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1554,6 +1609,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "" @@ -1590,21 +1648,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "Interface" @@ -1794,6 +1843,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1858,6 +1910,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1873,6 +1928,9 @@ msgstr "Senarai MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1952,6 +2010,9 @@ msgstr "" msgid "Modem device" msgstr "Alat modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2049,6 +2110,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2070,6 +2134,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2088,6 +2155,9 @@ msgstr "" msgid "No rules in this chain" msgstr "Tidak ada peraturan dalam rantai ini" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2221,6 +2291,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2299,6 +2372,9 @@ msgstr "PID" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2386,6 +2462,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2454,9 +2533,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Mencegah komunikasi sesama Pelanggan" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2505,6 +2581,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2524,9 +2605,6 @@ msgstr "RX" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2545,6 +2623,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2563,16 +2644,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2618,9 +2689,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "Rujukan" @@ -2709,6 +2777,12 @@ msgstr "" msgid "Restart Firewall" msgstr "Restart Firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Mengembalikan" + msgid "Restore backup" msgstr "Kembalikan sandaran" @@ -2797,6 +2871,9 @@ msgstr "Simpan & Melaksanakan" msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Tugas Jadual" @@ -2837,6 +2914,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2846,15 +2929,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "Isyarat" @@ -2950,6 +3033,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3099,6 +3185,9 @@ msgstr "" "Karakter yang diizinkan adalah: A-Z, a-z, " "0-9 dan _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3296,7 +3385,8 @@ msgstr "Zon masa" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3365,9 +3455,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3377,6 +3485,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3386,6 +3497,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Perubahan yang belum disimpan" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3522,6 +3639,9 @@ msgstr "" msgid "Version" msgstr "Versi" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3591,7 +3711,10 @@ msgstr "Gambaran keseluruhan Wayarles" msgid "Wireless Security" msgstr "Keselamatan WLAN" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3603,12 +3726,6 @@ msgstr "" msgid "Wireless network is enabled" msgstr "" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3708,6 +3825,9 @@ msgstr "Fail DNS tempatan" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "" diff --git a/luci-base/po/no/base.po b/luci-base/po/no/base.po index 1156f1b76..e5470e03e 100644 --- a/luci-base/po/no/base.po +++ b/luci-base/po/no/base.po @@ -153,9 +153,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Maks. samtidige spørringer" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -219,9 +216,6 @@ msgstr "Aksesspunkt" msgid "Actions" msgstr "Handlinger" -msgid "Activate this network" -msgstr "Aktiver dette nettverket" - msgid "Active IPv4-Routes" msgstr "Aktive IPv4-Ruter" @@ -273,6 +267,18 @@ msgstr "" msgid "Alert" msgstr "Varsle" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -284,6 +290,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "Tillat SSH passord godkjenning" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Tillat alle unntatt oppførte" @@ -315,6 +324,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -491,12 +505,12 @@ msgstr "Tilbake til oversikt" msgid "Back to scan results" msgstr "Tilbake til skanne resultat" +msgid "Backup" +msgstr "Sikkerhetskopi" + msgid "Backup / Flash Firmware" msgstr "Sikkerhetskopiering/Firmware oppgradering" -msgid "Backup / Restore" -msgstr "Sikkerhetskopi/Gjenoppretting" - msgid "Backup file list" msgstr "Sikkerhetskopier filliste" @@ -506,6 +520,9 @@ msgstr "Ugyldig adresse oppgitt!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -562,6 +579,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU forbruk (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Avbryt" @@ -629,12 +649,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Klikk \"Opprett arkiv\" for å laste ned et tar arkiv av de gjeldende " -"konfigurasjons filer. For å nullstille firmwaren til opprinnelig tilstand, " -"klikker du på \"Utfør nullstilling\" (kun mulig på squashfs firmwarer)." +"konfigurasjons filer." msgid "Client" msgstr "Klient" @@ -671,6 +689,9 @@ msgstr "" msgid "Configuration" msgstr "Konfigurasjon" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Konfigurasjonsfiler vil bli bevart." @@ -692,6 +713,9 @@ msgstr "Tilkoblet" msgid "Connection Limit" msgstr "Tilkoblingsgrense (antall)" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Tilkoblinger" @@ -805,6 +829,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -843,6 +870,9 @@ msgstr "Fjern" msgid "Delete this network" msgstr "Fjern dette nettverket" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Beskrivelse" @@ -861,10 +891,10 @@ msgstr "Enhet Konfigurasjon" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -892,15 +922,24 @@ msgstr "Deaktiver DNS oppsett" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Deaktivert" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Forkast oppstrøms RFC1918 svar" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1196,6 +1235,9 @@ msgstr "Filtrer private" msgid "Filter useless" msgstr "Filtrer ubrukelige" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1249,6 +1291,9 @@ msgstr "Flasher..." msgid "Force" msgstr "Bruk" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Bruk CCMP (AES)" @@ -1312,6 +1357,9 @@ msgstr "Kun GPRS" msgid "Gateway" msgstr "Gateway" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Gateway porter" @@ -1385,9 +1433,6 @@ msgid "" msgstr "" "Her kan du lime inn felles SSH-nøkler(en per linje), for SSH godkjenning." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b Trådløs Kontroller" - msgid "Hide ESSID" msgstr "Skjul ESSID" @@ -1404,6 +1449,9 @@ msgid "Host-IP or Network" msgstr "" "Verts-IP eller Nettverk" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Vertsnavn" @@ -1425,6 +1473,12 @@ msgstr "" msgid "IP address" msgstr "IP adresse" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1592,6 +1646,9 @@ msgstr "Innkommende:" msgid "Info" msgstr "Informasjon" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Oppstartskript" @@ -1628,21 +1685,12 @@ msgstr "Grensesnitt Oversikt" msgid "Interface is reconnecting..." msgstr "Grensesnittet kobler til igjen..." -msgid "Interface is shutting down..." -msgstr "Grensesnittet slår seg av..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "Grensesnittet er ikke tilgjengelig eller er ikke tilknyttet." -msgid "Interface reconnected" -msgstr "Grensesnittet er koblet til igjen" - -msgid "Interface shut down" -msgstr "Grensesnittet er slått av" - msgid "Interfaces" msgstr "Grensesnitt" @@ -1834,6 +1882,9 @@ msgstr "Belastning Gjennomsnitt" msgid "Loading" msgstr "Laster" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1903,6 +1954,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "Laveste leide adresse, forskjøvet fra nettverks adressen." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-Adresse" @@ -1918,6 +1972,9 @@ msgstr "MAC-Liste" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1997,6 +2054,9 @@ msgstr "" msgid "Modem device" msgstr "Modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Modem initiering tidsavbrudd" @@ -2094,6 +2154,9 @@ msgstr "Nettverks Verktøy" msgid "Network boot image" msgstr "Nettverks boot image" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Nettverk uten grensesnitt." @@ -2115,6 +2178,9 @@ msgstr "Ingen filer funnet" msgid "No information available" msgstr "Ingen informasjon tilgjengelig" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Ingen negative cache" @@ -2133,6 +2199,9 @@ msgstr "Ruteren er ikke passordbeskyttet!" msgid "No rules in this chain" msgstr "Ingen regler i denne tabellen" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Ingen sone tilknyttet" @@ -2267,6 +2336,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2347,6 +2419,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2434,6 +2509,9 @@ msgstr "Maksimalt:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2504,9 +2582,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Hindrer klient-til-klient kommunikasjon" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b Trådløs Kontroller" - msgid "Private Key" msgstr "" @@ -2555,6 +2630,11 @@ msgstr "" msgid "Quality" msgstr "Kvalitet" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2573,9 +2653,6 @@ msgstr "RX" msgid "RX Rate" msgstr "RX Rate" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s Trådløs Kontroller" - msgid "Radius-Accounting-Port" msgstr "Radius-Accounting-Port" @@ -2594,6 +2671,9 @@ msgstr "Radius-Authentication-Secret" msgid "Radius-Authentication-Server" msgstr "Radius-Authentication-Server" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2616,19 +2696,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Vil du nullstille alle endringer?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Slå av dette grensesnittet \"%s\" ?\n" -"Du kan miste kontakten med ruteren om du er tilkoblet via dette " -"grensesnittet." - msgid "Really switch protocol?" msgstr "Vil du endre protokoll?" @@ -2674,9 +2741,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Koble til igjen" -msgid "Reconnecting interface" -msgstr "Kobler til igjen" - msgid "References" msgstr "Referanser" @@ -2765,6 +2829,12 @@ msgstr "Omstart" msgid "Restart Firewall" msgstr "Omstart Brannmur" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Gjenoppretting" + msgid "Restore backup" msgstr "Gjenopprett sikkerhetskopi" @@ -2853,6 +2923,9 @@ msgstr "Lagre & Aktiver" msgid "Scan" msgstr "Skann" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Planlagte Oppgaver" @@ -2896,6 +2969,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Oppsett tidssynkronisering" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Oppsett DHCP server" @@ -2905,15 +2984,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Vis gjeldende liste med sikkerhetskopifiler" msgid "Shutdown this interface" msgstr "Slå av dette grensesnittet" -msgid "Shutdown this network" -msgstr "Slå av dette nettverket" - msgid "Signal" msgstr "Signal" @@ -3013,6 +3092,9 @@ msgstr "Start prioritet" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Oppstart" @@ -3174,6 +3256,9 @@ msgstr "" "Gyldige tegn er: A-Z, a-z, 0-9 og " "_" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3394,10 +3479,13 @@ msgstr "Tidssone" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "For å gjenopprette konfigurasjonsfiler, kan du her laste opp et backup arkiv " -"som ble opprettet tidligere." +"som ble opprettet tidligere. For å nullstille firmwaren til opprinnelig " +"tilstand, klikker du på \"Utfør nullstilling\" (kun mulig på squashfs " +"firmwarer)." msgid "Tone" msgstr "" @@ -3465,9 +3553,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "Kan ikke sende" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3477,6 +3583,9 @@ msgstr "Ukjent" msgid "Unknown Error, password not changed!" msgstr "Ukjent feil, passordet ble ikke endret!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Uhåndtert" @@ -3486,6 +3595,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Ulagrede Endringer" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Protokoll type er ikke støttet." @@ -3629,6 +3744,9 @@ msgstr "Bekreft" msgid "Version" msgstr "Versjon" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3698,8 +3816,11 @@ msgstr "Trådløs Oversikt" msgid "Wireless Security" msgstr "Trådløs Sikkerhet" -msgid "Wireless is disabled or not associated" -msgstr "Trådløs er deaktiver eller ikke tilknyttet" +msgid "Wireless is disabled" +msgstr "Trådløs er deaktiver" + +msgid "Wireless is not associated" +msgstr "Trådløs er ikke tilknyttet" msgid "Wireless is restarting..." msgstr "Trådløst starter på nytt..." @@ -3710,12 +3831,6 @@ msgstr "Trådløst nettverk er deaktivert" msgid "Wireless network is enabled" msgstr "Trådløst nettverk er aktivert" -msgid "Wireless restarted" -msgstr "Trådløst startet på nytt" - -msgid "Wireless shut down" -msgstr "Trådløst er slått av" - msgid "Write received DNS requests to syslog" msgstr "Skriv mottatte DNS forespørsler til syslog" @@ -3823,6 +3938,9 @@ msgstr "lokal DNS-fil" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "nei" @@ -3898,6 +4016,50 @@ msgstr "ja" msgid "« Back" msgstr "« Tilbake" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Aktiver dette nettverket" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b Trådløs Kontroller" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Grensesnittet slår seg av..." + +#~ msgid "Interface reconnected" +#~ msgstr "Grensesnittet er koblet til igjen" + +#~ msgid "Interface shut down" +#~ msgstr "Grensesnittet er slått av" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b Trådløs Kontroller" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s Trådløs Kontroller" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Slå av dette grensesnittet \"%s\" ?\n" +#~ "Du kan miste kontakten med ruteren om du er tilkoblet via dette " +#~ "grensesnittet." + +#~ msgid "Reconnecting interface" +#~ msgstr "Kobler til igjen" + +#~ msgid "Shutdown this network" +#~ msgstr "Slå av dette nettverket" + +#~ msgid "Wireless restarted" +#~ msgstr "Trådløst startet på nytt" + +#~ msgid "Wireless shut down" +#~ msgstr "Trådløst er slått av" + #~ msgid "DHCP Leases" #~ msgstr "DHCP Leier" diff --git a/luci-base/po/pl/base.po b/luci-base/po/pl/base.po index 63cb7bc04..2bad16c72 100644 --- a/luci-base/po/pl/base.po +++ b/luci-base/po/pl/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: LuCI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-04-20 09:40+0200\n" -"PO-Revision-Date: 2018-06-10 10:05+0200\n" +"PO-Revision-Date: 2018-07-14 21:35+0200\n" "Last-Translator: Rixerx \n" "Language-Team: Polish\n" "Language: pl\n" @@ -158,9 +158,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Maks. zapytań równoczesnych" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -225,9 +222,6 @@ msgstr "Punkt dostępowy" msgid "Actions" msgstr "Akcje" -msgid "Activate this network" -msgstr "Aktywuj tą sieć" - msgid "Active IPv4-Routes" msgstr "" "Aktywne trasy routingu IPv4SSH password authentication" msgstr "Pozwól na logowanie SSH" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Pozwól wszystkim oprócz wymienionych" msgid "Allow legacy 802.11b rates" -msgstr "" +msgstr "Zezwalaj na starsze wersje 802.11b" msgid "Allow listed only" msgstr "Pozwól tylko wymienionym" @@ -329,6 +338,11 @@ msgstr "Dozwolone adresy IP" msgid "Always announce default router" msgstr "Zawsze rozgłaszaj domyślny router" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -511,15 +525,14 @@ msgstr "Wróć do przeglądu" msgid "Back to scan results" msgstr "Wróć do wyników skanowania" -msgid "Backup / Flash Firmware" -msgstr "Kopia zapasowa/aktualizacja firmware" +msgid "Backup" +msgstr "Kopia zapasowa" -# NIe ma powodu skracać tekstu, zmieści się w polu. -msgid "Backup / Restore" -msgstr "Kopia zapasowa/Przywróć" +msgid "Backup / Flash Firmware" +msgstr "Kopia zapasowa / aktualizacja firmware" msgid "Backup file list" -msgstr "Kopia zapas. listy plików" +msgstr "Kopia zapasowa listy plików" msgid "Bad address specified!" msgstr "Wprowadzono zły adres" @@ -527,6 +540,9 @@ msgstr "Wprowadzono zły adres" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -547,7 +563,7 @@ msgid "Bind the tunnel to this interface (optional)." msgstr "" msgid "Bitrate" -msgstr "Przepływność" +msgstr "Szybkość transmisji" msgid "Bogus NX Domain Override" msgstr "Podrób statystyki NXDOMAIN" @@ -585,6 +601,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Użycie CPU (%)" +msgid "Call failed" +msgstr "Połączenie nieudane" + msgid "Cancel" msgstr "Anuluj" @@ -601,7 +620,7 @@ msgid "Changes applied." msgstr "Zmiany zostały zastosowane." msgid "Changes have been reverted." -msgstr "" +msgstr "Zmiany zostały cofnięte." msgid "Changes the administrator password for accessing the device" msgstr "Zmienia hasło administratora" @@ -652,12 +671,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" -"Wciśnij \"Twórz archiwum\" aby pobrać archiwum tar zawierające bieżące pliki " -"konfiguracyjne. Aby przywrócić ustawienia domyślne wciśnij \"Wykonaj reset" -"\" (możliwe tylko w przypadku obrazu squashfs)." +"Kliknij \"Twórz archiwum\" aby pobrać archiwum tar zawierające bieżące pliki " +"konfiguracyjne." msgid "Client" msgstr "Klient" @@ -699,6 +716,9 @@ msgstr "" msgid "Configuration" msgstr "Konfiguracja" +msgid "Configuration failed" +msgstr "Konfiguracja nieudana" + msgid "Configuration files will be kept." msgstr "Pliki konfiguracyjne zostaną zachowane." @@ -720,6 +740,9 @@ msgstr "Połączony" msgid "Connection Limit" msgstr "Limit połączeń" +msgid "Connection attempt failed" +msgstr "Próba połączenia nieudana" + msgid "Connections" msgstr "Połączenia" @@ -836,6 +859,9 @@ msgstr "Status DSL" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -852,7 +878,7 @@ msgid "Default gateway" msgstr "Brama domyślna" msgid "Default is stateless + stateful" -msgstr "Domyślnie jest to stateless + stateful" +msgstr "" msgid "Default state" msgstr "Stan domyślny" @@ -874,6 +900,9 @@ msgstr "Usuń" msgid "Delete this network" msgstr "Usuń tą sieć" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Opis" @@ -893,12 +922,12 @@ msgstr "Konfiguracja urządzenia" msgid "Device is rebooting..." msgstr "Urządzenie jest uruchamiane ponownie ..." -msgid "Device unreachable" -msgstr "Urządzenie nieosiągalne" - msgid "Device unreachable!" msgstr "" +msgid "Device unreachable! Still waiting for device..." +msgstr "" + msgid "Diagnostics" msgstr "Diagnostyka" @@ -924,15 +953,24 @@ msgstr "Wyłącz konfigurację DNS" msgid "Disable Encryption" msgstr "Wyłącz szyfrowanie" +msgid "Disable this network" +msgstr "Wyłącz tą sieć" + msgid "Disabled" msgstr "Wyłączony" msgid "Disabled (default)" msgstr "Wyłączone (domyślnie)" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Odrzuć wychodzące odpowiedzi RFC1918" +msgid "Disconnection attempt failed" +msgstr "Próba rozłączenia nie powiodła się" + msgid "Dismiss" msgstr "" @@ -1198,13 +1236,13 @@ msgid "External R1 Key Holder List" msgstr "" msgid "External system log server" -msgstr "Serwer zewnętrzny dla logów systemowych" +msgstr "Zewnętrzny serwer dla logów systemowych" msgid "External system log server port" -msgstr "Port zewnętrznego serwera logów systemowych" +msgstr "Port zewnętrznego serwera dla logów systemowych" msgid "External system log server protocol" -msgstr "Protokół zewnętrznego serwera logów systemowych" +msgstr "Protokół zewnętrznego serwera dla logów systemowych" msgid "Extra SSH command options" msgstr "" @@ -1219,7 +1257,7 @@ msgid "FT protocol" msgstr "" msgid "Failed to confirm apply within %ds, waiting for rollback…" -msgstr "" +msgstr "Nie udało się zatwierdzić w ciągu %ds, czekam na wycofanie…" msgid "File" msgstr "Plik" @@ -1239,6 +1277,9 @@ msgstr "Filtruj prywatne" msgid "Filter useless" msgstr "Filtruj bezużyteczne" +msgid "Finalizing failed" +msgstr "Finalizacja nie powiodła się" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1292,6 +1333,9 @@ msgstr "Flashowanie..." msgid "Force" msgstr "Wymuś" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Wymuś CCMP (AES)" @@ -1355,6 +1399,9 @@ msgstr "Tylko GPRS" msgid "Gateway" msgstr "Brama" +msgid "Gateway address is invalid" +msgstr "Adres bramy jest nieprawidłowy" + msgid "Gateway ports" msgstr "Porty bramy" @@ -1432,9 +1479,6 @@ msgstr "" "Tutaj wklej swoje klucze publiczne SSH (po jednym w linii), dla " "uwierzytelniania SSH" -msgid "Hermes 802.11b Wireless Controller" -msgstr "Kontroler bezprzewodowy Hermes 802.11b" - msgid "Hide ESSID" msgstr "" "Ukryj ESSIDIP or Network" msgstr "IP lub sieć Hosta" +msgid "Host-Uniq tag content" +msgstr "Zawartość znacznika Host-Uniq" + msgid "Hostname" msgstr "Nazwa hosta" @@ -1473,6 +1520,12 @@ msgstr "" msgid "IP address" msgstr "Adres IP" +msgid "IP address in invalid" +msgstr "Nieprawidłowy adres IP" + +msgid "IP address is missing" +msgstr "Brakuje adresu IP" + msgid "IPv4" msgstr "IPv4" @@ -1480,7 +1533,7 @@ msgid "IPv4 Firewall" msgstr "Firewall IPv4" msgid "IPv4 Upstream" -msgstr "Protokół IPv4" +msgstr "Źródłowy IPv4" msgid "IPv4 address" msgstr "Adres IPv4" @@ -1522,7 +1575,7 @@ msgid "IPv6 Firewall" msgstr "Firewall IPv6" msgid "IPv6 Neighbours" -msgstr "" +msgstr "Sąsiedztwo IPv6" msgid "IPv6 Settings" msgstr "Ustawienia IPv6" @@ -1531,7 +1584,7 @@ msgid "IPv6 ULA-Prefix" msgstr "IPv6 Prefiks-ULA" msgid "IPv6 Upstream" -msgstr "Protokół IPv6" +msgstr "Źródłowy IPv6" msgid "IPv6 address" msgstr "Adres IPv6" @@ -1646,6 +1699,9 @@ msgstr "Przychodzący:" msgid "Info" msgstr "Info" +msgid "Initialization failure" +msgstr "Błąd inicjalizacji" + msgid "Initscript" msgstr "Skrypt startowy" @@ -1684,21 +1740,12 @@ msgstr "Przegląd Interfejsów" msgid "Interface is reconnecting..." msgstr "Ponowne łączenie interfejsu..." -msgid "Interface is shutting down..." -msgstr "Interfejs jest wyłączany..." - msgid "Interface name" msgstr "Nazwa interfejsu" msgid "Interface not present or not connected yet." msgstr "Interfejs nie istnieje lub nie jest jeszcze podłączony." -msgid "Interface reconnected" -msgstr "Połączono ponownie interfejs" - -msgid "Interface shut down" -msgstr "Wyłączono interfejs" - msgid "Interfaces" msgstr "Interfejsy" @@ -1892,6 +1939,9 @@ msgstr "Średnie obciążenie" msgid "Loading" msgstr "Ładowanie" +msgid "Local IP address is invalid" +msgstr "Lokalny adres IP jest nieprawidłowy" + msgid "Local IP address to assign" msgstr "Lokalny adres IP do przypisania" @@ -1962,6 +2012,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "Najniższy wydzierżawiony adres jako offset dla adresu sieci." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "Adres MAC" @@ -1977,6 +2030,9 @@ msgstr "Lista MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "Reguła MAP jest nieprawidłowa" + msgid "MB/s" msgstr "MB/s" @@ -2058,6 +2114,9 @@ msgstr "Model" msgid "Modem device" msgstr "Modem" +msgid "Modem information query failed" +msgstr "Zapytanie dotyczące modemu nie powiodło się" + msgid "Modem init timeout" msgstr "Limit czasu inicjacji modemu" @@ -2155,6 +2214,9 @@ msgstr "Narzędzia sieciowe" msgid "Network boot image" msgstr "Sieciowy obraz startowy" +msgid "Network device is not present" +msgstr "Urządzenie sieciowe nie jest obecne" + msgid "Network without interfaces." msgstr "Sieć bez interfejsów" @@ -2176,6 +2238,9 @@ msgstr "Nie znaleziono plików" msgid "No information available" msgstr "Brak dostępnych informacji" +msgid "No matching prefix delegation" +msgstr "Brak zgodnej delegacji prefiksu" + msgid "No negative cache" msgstr "Brak odwrotnego cache`a" @@ -2194,6 +2259,9 @@ msgstr "Nie ustawiono hasła!" msgid "No rules in this chain" msgstr "Brak zasad w tym łańcuchu" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Brak przypisanej strefy" @@ -2333,6 +2401,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "Opcjonalny. Opis peera." + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2413,6 +2484,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "Kod PIN został odrzucony" + msgid "PMK R1 Push" msgstr "PMK R1 Push" @@ -2500,6 +2574,9 @@ msgstr "Szczyt:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "Brakuje adresu Peera" + msgid "Peers" msgstr "" @@ -2568,10 +2645,7 @@ msgid "Prevent listening on these interfaces." msgstr "Zapobiegaj nasłuchiwaniu na tych interfejsach." msgid "Prevents client-to-client communication" -msgstr "Zabroń klientą na komunikacje między sobą" - -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Kontroler bezprzewodowy Prism2/2.5/3 802.11b" +msgstr "Zapobiega komunikacji między klientem a klientem" msgid "Private Key" msgstr "Klucz prywatny" @@ -2621,6 +2695,11 @@ msgstr "Komórkowy QMI" msgid "Quality" msgstr "Jakość" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2639,9 +2718,6 @@ msgstr "RX" msgid "RX Rate" msgstr "Szybkość RX" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Kontroler bezprzewodowy RaLink 802.11%s" - msgid "Radius-Accounting-Port" msgstr "Port Radius-Accounting" @@ -2660,6 +2736,11 @@ msgstr "Sekret Radius-Authentication" msgid "Radius-Authentication-Server" msgstr "Serwer Radius-Authentication" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" +"Surowe bajty kodowane szesnastkowo. Pozostaw puste, chyba że wymaga tego " +"dostawca internetowy" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2683,19 +2764,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Naprawdę usunąć wszelkie zmiany?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Naprawdę wyłączyć interfejs \"%s\"?\n" -"Możesz stracić dostęp do tego urządzenia jeśli jesteś połączony przez ten " -"interfejs!" - msgid "Really switch protocol?" msgstr "Naprawdę zmienić protokół?" @@ -2741,9 +2809,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Połącz ponownie ten interfejs" -msgid "Reconnecting interface" -msgstr "Łączę ponownie interfejs" - msgid "References" msgstr "Referencje" @@ -2834,6 +2899,12 @@ msgstr "Uruchom ponownie" msgid "Restart Firewall" msgstr "Uruchom ponownie firewalla" +msgid "Restart radio interface" +msgstr "Uruchom ponownie interfejs radiowy" + +msgid "Restore" +msgstr "Przywróć" + msgid "Restore backup" msgstr "Przywróć kopię zapasową" @@ -2865,7 +2936,7 @@ msgid "Route Allowed IPs" msgstr "" msgid "Route type" -msgstr "Typ trasy" +msgstr "" msgid "Router Advertisement-Service" msgstr "Serwis rozgłoszeniowy routera" @@ -2923,6 +2994,9 @@ msgstr "Zapisz i zastosuj" msgid "Scan" msgstr "Skanuj" +msgid "Scan request failed" +msgstr "" + # Raczej nie stosuje się kilku dużych liter w tym samym msgid "Scheduled Tasks" msgstr "Zaplanowane zadania" @@ -2969,6 +3043,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Ustawienia synchronizacji czasu" +msgid "Setting PLMN failed" +msgstr "Ustawienie PLMN nie powiodło się" + +msgid "Setting operation mode failed" +msgstr "Ustawienie trybu nie powiodło się" + msgid "Setup DHCP Server" msgstr "Ustawienia serwera DHCP" @@ -2978,15 +3058,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Pokaż aktualną listę plików do backupu" msgid "Shutdown this interface" msgstr "Wyłącz ten interfejs" -msgid "Shutdown this network" -msgstr "Wyłącz tą sieć" - msgid "Signal" msgstr "Sygnał" @@ -3021,7 +3101,7 @@ msgid "Software" msgstr "Oprogramowanie" msgid "Software VLAN" -msgstr "Programowy VLAN" +msgstr "VLAN programowy" msgid "Some fields are invalid, cannot save values!" msgstr "Wartości pewnych pól są niewłaściwe, nie mogę ich zachować!" @@ -3088,6 +3168,9 @@ msgstr "Priorytet uruchomienia" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Autostart" @@ -3251,6 +3334,9 @@ msgstr "" "Dozwolone znaki to: A-Z, a-z, 0-9 " "oraz _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "Archiwum kopii zapasowej nie wygląda na prawidłowe." + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3482,9 +3568,10 @@ msgstr "Strefa czasowa" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" -"Aby przywrócić pliki konfiguracyjne, możesz przesłać tutaj wcześniej " +"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesłać wcześniej " "utworzoną kopię zapasową." msgid "Tone" @@ -3553,9 +3640,27 @@ msgstr "Porty USB" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "Nie można ustalić nazwy urządzenia" + +msgid "Unable to determine external IP address" +msgstr "Nie można ustalić zewnętrznego adresu IP" + +msgid "Unable to determine upstream interface" +msgstr "Nie można określić interfejsu źródłowego" + msgid "Unable to dispatch" msgstr "Nie można wysłać" +msgid "Unable to obtain client ID" +msgstr "Nie można uzyskać ID klienta" + +msgid "Unable to resolve AFTR host name" +msgstr "Nie można rozpoznać nazwy AFTR hosta" + +msgid "Unable to resolve peer host name" +msgstr "Nie można rozpoznać nazwy peera" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3565,6 +3670,9 @@ msgstr "Nieznany" msgid "Unknown Error, password not changed!" msgstr "Nieznany błąd, hasło nie zostało zmienione!" +msgid "Unknown error (%s)" +msgstr "Nieznany błąd (%s)" + msgid "Unmanaged" msgstr "Niezarządzalny" @@ -3574,6 +3682,12 @@ msgstr "Odmontuj" msgid "Unsaved Changes" msgstr "Niezapisane zmiany" +msgid "Unsupported MAP type" +msgstr "Nieobsługiwany typ MAP" + +msgid "Unsupported modem" +msgstr "Nieobsługiwany modem" + msgid "Unsupported protocol type." msgstr "Nieobsługiwany typ protokołu." @@ -3719,6 +3833,9 @@ msgstr "Zweryfikuj" msgid "Version" msgstr "Wersja" +msgid "Virtual dynamic interface" +msgstr "Wirtualny interfejs dynamiczny" + msgid "WDS" msgstr "WDS" @@ -3790,8 +3907,11 @@ msgstr "Przegląd sieci bezprzewodowych" msgid "Wireless Security" msgstr "Zabezpieczenia sieci bezprzewodowych" -msgid "Wireless is disabled or not associated" -msgstr "Sieć bezprzewodowa jest wyłączona lub niepołączona" +msgid "Wireless is disabled" +msgstr "Sieć bezprzewodowa jest wyłączona" + +msgid "Wireless is not associated" +msgstr "Sieć bezprzewodowa jest niepołączona" msgid "Wireless is restarting..." msgstr "Restart sieci bezprzewodowej..." @@ -3802,12 +3922,6 @@ msgstr "Sieć bezprzewodowa jest wyłączona" msgid "Wireless network is enabled" msgstr "Sieć bezprzewodowa jest włączona" -msgid "Wireless restarted" -msgstr "Zrestartowano sieć bezprzewodową" - -msgid "Wireless shut down" -msgstr "Wyłączanie sieci bezprzewodowej" - msgid "Write received DNS requests to syslog" msgstr "Zapisz otrzymane żądania DNS do syslog'a" @@ -3918,6 +4032,9 @@ msgstr "lokalny plik DNS" msgid "minutes" msgstr "minuty" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "nie" @@ -3994,6 +4111,50 @@ msgstr "tak" msgid "« Back" msgstr "« Wróć" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Aktywuj tą sieć" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Kontroler bezprzewodowy Hermes 802.11b" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Interfejs jest wyłączany..." + +#~ msgid "Interface reconnected" +#~ msgstr "Połączono ponownie interfejs" + +#~ msgid "Interface shut down" +#~ msgstr "Wyłączono interfejs" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Kontroler bezprzewodowy Prism2/2.5/3 802.11b" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "Kontroler bezprzewodowy RaLink 802.11%s" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Naprawdę wyłączyć interfejs \"%s\"?\n" +#~ "Możesz stracić dostęp do tego urządzenia jeśli jesteś połączony przez ten " +#~ "interfejs!" + +#~ msgid "Reconnecting interface" +#~ msgstr "Łączę ponownie interfejs" + +#~ msgid "Shutdown this network" +#~ msgstr "Wyłącz tą sieć" + +#~ msgid "Wireless restarted" +#~ msgstr "Zrestartowano sieć bezprzewodową" + +#~ msgid "Wireless shut down" +#~ msgstr "Wyłączanie sieci bezprzewodowej" + #~ msgid "DHCP Leases" #~ msgstr "Dzierżawy DHCP" diff --git a/luci-base/po/pt-br/base.po b/luci-base/po/pt-br/base.po index 5fe11a0eb..d440b2872 100644 --- a/luci-base/po/pt-br/base.po +++ b/luci-base/po/pt-br/base.po @@ -169,9 +169,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Número máximo de consultas concorrentes" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -239,9 +236,6 @@ msgstr "Ponto de Acceso (AP)" msgid "Actions" msgstr "Ações" -msgid "Activate this network" -msgstr "Ativar esta rede" - msgid "Active IPv4-Routes" msgstr "" "Rotas IPv4 ativas" @@ -297,6 +291,18 @@ msgstr "" msgid "Alert" msgstr "Alerta" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -311,6 +317,9 @@ msgid "Allow SSH password authentication" msgstr "" "Permitir autenticação SSH por senha" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Permitir todos, exceto os listados" @@ -346,6 +355,11 @@ msgstr "Endereços IP autorizados" msgid "Always announce default router" msgstr "Sempre anuncie o roteador padrão" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "Anexo" @@ -531,12 +545,12 @@ msgstr "Voltar para visão geral" msgid "Back to scan results" msgstr "Voltar para os resultados da busca" +msgid "Backup" +msgstr "Cópia de Segurança" + msgid "Backup / Flash Firmware" msgstr "Cópia de Segurança / Gravar Firmware" -msgid "Backup / Restore" -msgstr "Cópia de Segurança / Restauração" - msgid "Backup file list" msgstr "Lista de arquivos para a cópia de segurança" @@ -546,6 +560,9 @@ msgstr "Endereço especificado está incorreto!" msgid "Band" msgstr "Banda" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -607,6 +624,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Uso da CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Cancelar" @@ -675,12 +695,10 @@ msgstr "Encapsulamento UDP da Cisco" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Clique em \"Gerar arquivo\" para baixar um arquivo tar com os arquivos de " -"configuração atuais. Para retornar o roteador para o seu estado inicial, " -"clique em \"Zerar configuração\" (somente possível para imagens squashfs)." +"configuração atuais." msgid "Client" msgstr "Cliente" @@ -718,6 +736,9 @@ msgstr "" msgid "Configuration" msgstr "Configuração" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Os arquivos de configuração serão mantidos." @@ -739,6 +760,9 @@ msgstr "Conectado" msgid "Connection Limit" msgstr "Limite de conexão" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Conexões" @@ -854,6 +878,9 @@ msgstr "Estado da DSL" msgid "DSL line mode" msgstr "Modo de linha DSL" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -893,6 +920,9 @@ msgstr "Apagar" msgid "Delete this network" msgstr "Apagar esta rede" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Descrição" @@ -911,10 +941,10 @@ msgstr "Configuração do Dispositivo" msgid "Device is rebooting..." msgstr "O dispositivo está reiniciando..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Dispositivo não alcançável" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -942,16 +972,25 @@ msgstr "Desabilita a configuração do DNS" msgid "Disable Encryption" msgstr "Desabilitar Cifragem" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Desabilitado" msgid "Disabled (default)" msgstr "Desabilitado (padrão)" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" "Descartar respostas de servidores externos para redes privadas (RFC1918)" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1257,6 +1296,9 @@ msgstr "Filtrar endereços privados" msgid "Filter useless" msgstr "Filtrar consultas inúteis" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1313,6 +1355,9 @@ msgstr "Gravando na flash..." msgid "Force" msgstr "Forçar" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Forçar CCMP (AES)" @@ -1379,6 +1424,9 @@ msgstr "Somente GPRS" msgid "Gateway" msgstr "Roteador" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Acesso remoto a portas encaminhadas" @@ -1457,9 +1505,6 @@ msgstr "" "Aqui você pode colar as chaves públicas do SSH (uma por linha) para a " "autenticação por chaves do SSH." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b Wireless Controlador" - msgid "Hide ESSID" msgstr "" "Ocultar IP do Equipamento " "ou Rede" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Nome do equipamento" @@ -1502,6 +1550,12 @@ msgstr "Endereços IP" msgid "IP address" msgstr "Endereço IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1681,6 +1735,9 @@ msgstr "Entrando:" msgid "Info" msgstr "Informação" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Script de iniciação" @@ -1717,21 +1774,12 @@ msgstr "Visão Geral da Interface" msgid "Interface is reconnecting..." msgstr "A interface está reconectando..." -msgid "Interface is shutting down..." -msgstr "A interface está desligando..." - msgid "Interface name" msgstr "Nome da Interface" msgid "Interface not present or not connected yet." msgstr "A interface não está presente ou não está conectada ainda." -msgid "Interface reconnected" -msgstr "Interface reconectada" - -msgid "Interface shut down" -msgstr "Interface desligada" - msgid "Interfaces" msgstr "Interfaces" @@ -1942,6 +1990,9 @@ msgstr "Carga Média" msgid "Loading" msgstr "Carregando" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "Endereço IP local para atribuir" @@ -2015,6 +2066,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "O endereço mais baixo concedido como deslocamento do endereço da rede." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "Endereço MAC" @@ -2030,6 +2084,9 @@ msgstr "Lista de MAC" msgid "MAP / LW4over6" msgstr "MAP / LW4over6" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -2117,6 +2174,9 @@ msgstr "Modelo" msgid "Modem device" msgstr "Dispositivo do Modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "Estouro de tempo da iniciação do modem" @@ -2214,6 +2274,9 @@ msgstr "Utilitários de Rede" msgid "Network boot image" msgstr "Imagem de boot pela rede" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Rede sem interfaces." @@ -2235,6 +2298,9 @@ msgstr "Nenhum arquivo encontrado" msgid "No information available" msgstr "Nenhuma informação disponível" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Nenhum cache negativo" @@ -2253,6 +2319,9 @@ msgstr "Nenhuma senha definida!" msgid "No rules in this chain" msgstr "Sem regras nesta cadeia" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Nenhuma zona definida" @@ -2392,6 +2461,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "Opcional. Cria rotas para endereços IP Autorizados para este parceiro." +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2480,6 +2552,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "PMK R1 Push" @@ -2567,6 +2642,9 @@ msgstr "Pico:" msgid "Peer IP address to assign" msgstr "Endereço IP do parceiro para atribuir" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "Parceiros" @@ -2638,9 +2716,6 @@ msgstr "Evite escutar nestas Interfaces." msgid "Prevents client-to-client communication" msgstr "Impede a comunicação de cliente para cliente" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b Wireless Controlador" - msgid "Private Key" msgstr "Chave Privada" @@ -2691,6 +2766,11 @@ msgstr "Celular QMI" msgid "Quality" msgstr "Qualidade" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "Validade da Chave R0" @@ -2709,9 +2789,6 @@ msgstr "RX" msgid "RX Rate" msgstr "Taxa de RX" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s Wireless Controlador" - msgid "Radius-Accounting-Port" msgstr "Porta de contabilidade do RADIUS" @@ -2730,6 +2807,9 @@ msgstr "Segredo da autenticação do RADIUS" msgid "Radius-Authentication-Server" msgstr "Servidor da autenticação do RADIUS" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2754,19 +2834,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Realmente limpar todas as mudanças?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Realmente desligar esta interface\"%s\" ?\n" -"Você poderá perder o acesso a este dispositivo se você estiver conectado " -"através desta interface." - msgid "Really switch protocol?" msgstr "Realmente trocar o protocolo?" @@ -2812,9 +2879,6 @@ msgstr "Recomendado. Endereços IP da interface do WireGuard." msgid "Reconnect this interface" msgstr "Reconectar esta interface" -msgid "Reconnecting interface" -msgstr "Reconectando interface" - msgid "References" msgstr "Referências" @@ -2909,6 +2973,12 @@ msgstr "Reiniciar" msgid "Restart Firewall" msgstr "Reiniciar o firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Restauração" + msgid "Restore backup" msgstr "Restaurar cópia de segurança" @@ -2998,6 +3068,9 @@ msgstr "Salvar & Aplicar" msgid "Scan" msgstr "Procurar" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" @@ -3040,6 +3113,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Configurar a Sincronização do Horário" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Configurar Servidor DHCP" @@ -3051,15 +3130,15 @@ msgstr "" msgid "Short GI" msgstr "Intervalo de guarda curto" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Mostra a lista atual de arquivos para a cópia de segurança" msgid "Shutdown this interface" msgstr "Desligar esta interface" -msgid "Shutdown this network" -msgstr "Desligar esta rede" - msgid "Signal" msgstr "Sinal" @@ -3166,6 +3245,9 @@ msgstr "Prioridade de iniciação" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Iniciação" @@ -3331,6 +3413,9 @@ msgstr "" "Os caracteres permitidos são: A-Z, a-z, 0-9 e _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" "O arquivo de configuração não pode ser carregado devido ao seguinte erro:" @@ -3563,10 +3648,12 @@ msgstr "Fuso Horário" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Para recuperar os arquivos de configuração, você pode enviar aqui uma cópia " -"de segurança anterior." +"de segurança anterior. Para retornar o roteador para o seu estado inicial, " +"clique em \"Zerar configuração\" (somente possível para imagens squashfs)." msgid "Tone" msgstr "Tom" @@ -3634,9 +3721,27 @@ msgstr "Portas USB" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "Não é possível a expedição" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" "Segundos de indisponibilidade (UAS%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Ativar esta rede" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b Wireless Controlador" + +#~ msgid "Interface is shutting down..." +#~ msgstr "A interface está desligando..." + +#~ msgid "Interface reconnected" +#~ msgstr "Interface reconectada" + +#~ msgid "Interface shut down" +#~ msgstr "Interface desligada" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b Wireless Controlador" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s Wireless Controlador" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Realmente desligar esta interface\"%s\" ?\n" +#~ "Você poderá perder o acesso a este dispositivo se você estiver conectado " +#~ "através desta interface." + +#~ msgid "Reconnecting interface" +#~ msgstr "Reconectando interface" + +#~ msgid "Shutdown this network" +#~ msgstr "Desligar esta rede" + +#~ msgid "Wireless restarted" +#~ msgstr "A rede sem fio reiniciou" + +#~ msgid "Wireless shut down" +#~ msgstr "Rede sem fio desligada" + #~ msgid "DHCP Leases" #~ msgstr "Alocações do DHCP" diff --git a/luci-base/po/pt/base.po b/luci-base/po/pt/base.po index 3d3575b38..36320d995 100644 --- a/luci-base/po/pt/base.po +++ b/luci-base/po/pt/base.po @@ -163,9 +163,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Max. consultas concorrentes" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -225,9 +222,6 @@ msgstr "Access Point (AP)" msgid "Actions" msgstr "Acções" -msgid "Activate this network" -msgstr "Ativar esta rede" - msgid "Active IPv4-Routes" msgstr "" "Rotas-IPv4 ativas" @@ -283,6 +277,18 @@ msgstr "" msgid "Alert" msgstr "Alerta" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -295,6 +301,9 @@ msgid "Allow SSH password authentication" msgstr "" "Permitir autenticação SSH por senha" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Permitir todos, excepto os listados" @@ -328,6 +337,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -504,12 +518,12 @@ msgstr "Voltar à vista global" msgid "Back to scan results" msgstr "Voltar aos resultados do scan" +msgid "Backup" +msgstr "Backup" + msgid "Backup / Flash Firmware" msgstr "Backup / Flashar Firmware" -msgid "Backup / Restore" -msgstr "Backup / Restauração" - msgid "Backup file list" msgstr "Lista de ficheiros para backup" @@ -519,6 +533,9 @@ msgstr "Endereço mal especificado!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -575,6 +592,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Uso da CPU (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Cancelar" @@ -642,12 +662,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Clique em \"Gerar arquivo\" para descarregar o ficheiro tar com os actuais " -"ficheiros de configuração. Para voltar as definições originais do firmware, " -"clique \" Fazer reset\" (só possível com imagens squashfs)" +"ficheiros de configuração." msgid "Client" msgstr "Cliente" @@ -684,6 +702,9 @@ msgstr "" msgid "Configuration" msgstr "Configuração" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Os ficheiros de configuração serão mantidos." @@ -705,6 +726,9 @@ msgstr "Ligado" msgid "Connection Limit" msgstr "Limite de Ligações" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Ligações" @@ -818,6 +842,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -857,6 +884,9 @@ msgstr "Apagar" msgid "Delete this network" msgstr "Apagar esta rede" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Descrição" @@ -875,10 +905,10 @@ msgstr "Configuração do Dispositivo" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -906,15 +936,24 @@ msgstr "Desativar configuração de DNS" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Desativado" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Descartar respostas RFC1918 a montante" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1214,6 +1253,9 @@ msgstr "Filtrar endereços privados" msgid "Filter useless" msgstr "Filtro inútil" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1267,6 +1309,9 @@ msgstr "A programar...." msgid "Force" msgstr "Forçar" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Forçar CCMP (AES)" @@ -1329,6 +1374,9 @@ msgstr "Só GPRS" msgid "Gateway" msgstr "Gateway" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Portas de gateway" @@ -1404,9 +1452,6 @@ msgstr "" "Aqui pode colar as chaves SSH (uma por linha) para a autenticação SSH por " "chave pública." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Controlador Wireless Hermes 802.11b" - msgid "Hide ESSID" msgstr "" "Ocultar IP or Network" msgstr "" "IP do host ou rede" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Hostname" @@ -1446,6 +1494,12 @@ msgstr "" msgid "IP address" msgstr "Endereço IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1615,6 +1669,9 @@ msgstr "Entrada:" msgid "Info" msgstr "Info" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Script de inicialização" @@ -1651,21 +1708,12 @@ msgstr "Visão Geral da Interface" msgid "Interface is reconnecting..." msgstr "A interface está a religar..." -msgid "Interface is shutting down..." -msgstr "A interface está a desligar..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "Interface não presente ou ainda não ligada." -msgid "Interface reconnected" -msgstr "Interface religada" - -msgid "Interface shut down" -msgstr "Desligar interface" - msgid "Interfaces" msgstr "Interfaces" @@ -1858,6 +1906,9 @@ msgstr "Carga Média" msgid "Loading" msgstr "A carregar" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1927,6 +1978,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "Endereço-MAC" @@ -1942,6 +1996,9 @@ msgstr "Lista-MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -2021,6 +2078,9 @@ msgstr "" msgid "Modem device" msgstr "Dispositivo do modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2118,6 +2178,9 @@ msgstr "Ferramentas de Rede" msgid "Network boot image" msgstr "Imagem de arranque via rede" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Rede sem interfaces." @@ -2139,6 +2202,9 @@ msgstr "Não foram encontrados ficheiros" msgid "No information available" msgstr "Sem informação disponível" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Sem cache negativa" @@ -2157,6 +2223,9 @@ msgstr "Sem password definida!" msgid "No rules in this chain" msgstr "Sem regras nesta cadeia" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Sem zona atribuída" @@ -2291,6 +2360,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2369,6 +2441,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2456,6 +2531,9 @@ msgstr "Pico:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2524,9 +2602,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Impede a comunicação cliente-a-cliente" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Controlador Wireless Prism2/2.5/3 802.11b" - msgid "Private Key" msgstr "" @@ -2575,6 +2650,11 @@ msgstr "" msgid "Quality" msgstr "Qualidade" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2593,9 +2673,6 @@ msgstr "RX" msgid "RX Rate" msgstr "Taxa RX" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Controlador Wireless RaLink 802.11%s" - msgid "Radius-Accounting-Port" msgstr "Porta-Conta-Radius" @@ -2614,6 +2691,9 @@ msgstr "Segredo-Autenticação-Radius" msgid "Radius-Authentication-Server" msgstr "Servidor-Autenticação-Radius" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2636,19 +2716,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Deseja mesmo limpar todas as alterações?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Deseja mesmo desligar a interface \"%s\" ?\n" -"Pode perder o acesso ao dispositivo se estiver ligado através desta " -"interface." - msgid "Really switch protocol?" msgstr "Deseja mesmo trocar o protocolo?" @@ -2694,9 +2761,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Reconetar esta interface" -msgid "Reconnecting interface" -msgstr "A reconectar interface" - msgid "References" msgstr "Referências" @@ -2785,6 +2849,12 @@ msgstr "Reiniciar" msgid "Restart Firewall" msgstr "Reiniciar Firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Restauração" + msgid "Restore backup" msgstr "Restaurar backup" @@ -2874,6 +2944,9 @@ msgstr "Salvar & Aplicar" msgid "Scan" msgstr "Procurar" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" @@ -2915,6 +2988,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Configurar Sincronização Horária" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Configurar Servidor DHCP" @@ -2924,15 +3003,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "Mostrar lista ficheiros para backup" msgid "Shutdown this interface" msgstr "Desligar esta interface" -msgid "Shutdown this network" -msgstr "Desligar esta rede" - msgid "Signal" msgstr "Sinal" @@ -3028,6 +3107,9 @@ msgstr "Prioridade de inicialização" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3180,6 +3262,9 @@ msgstr "" "Os caracteres permitidos são: A-Z, a-z, 0-9 e _" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3396,10 +3481,12 @@ msgstr "Fuso Horário" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Para restaurar os ficheiros de configuração, pode carregar aqui um ficheiro " -"de backup gerado anteriormente." +"de backup gerado anteriormente. Para voltar as definições originais do " +"firmware, clique \" Fazer reset\" (só possível com imagens squashfs)." msgid "Tone" msgstr "" @@ -3467,9 +3554,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3479,6 +3584,9 @@ msgstr "Desconhecido" msgid "Unknown Error, password not changed!" msgstr "Erro Desconhecido, a password não foi alterada!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Não gerido" @@ -3488,6 +3596,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Alterações não Guardadas" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Tipo de protocolo não suportado." @@ -3624,6 +3738,9 @@ msgstr "Verificar" msgid "Version" msgstr "Versão" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3693,8 +3810,11 @@ msgstr "Vista Global Wireless" msgid "Wireless Security" msgstr "Segurança Wireless" -msgid "Wireless is disabled or not associated" -msgstr "Wireless desativada ou não associada" +msgid "Wireless is disabled" +msgstr "Wireless desativada" + +msgid "Wireless is not associated" +msgstr "Wireless não associada" msgid "Wireless is restarting..." msgstr "A Wireless está a reiniciar..." @@ -3705,12 +3825,6 @@ msgstr "Wireless está desativado." msgid "Wireless network is enabled" msgstr "A rede wireless está ativada" -msgid "Wireless restarted" -msgstr "Rede wireless reiniciada" - -msgid "Wireless shut down" -msgstr "Desligar wireless" - msgid "Write received DNS requests to syslog" msgstr "Escrever os pedidos de DNS para o syslog" @@ -3820,6 +3934,9 @@ msgstr "" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "não" @@ -3895,6 +4012,50 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Ativar esta rede" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Controlador Wireless Hermes 802.11b" + +#~ msgid "Interface is shutting down..." +#~ msgstr "A interface está a desligar..." + +#~ msgid "Interface reconnected" +#~ msgstr "Interface religada" + +#~ msgid "Interface shut down" +#~ msgstr "Desligar interface" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Controlador Wireless Prism2/2.5/3 802.11b" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "Controlador Wireless RaLink 802.11%s" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Deseja mesmo desligar a interface \"%s\" ?\n" +#~ "Pode perder o acesso ao dispositivo se estiver ligado através desta " +#~ "interface." + +#~ msgid "Reconnecting interface" +#~ msgstr "A reconectar interface" + +#~ msgid "Shutdown this network" +#~ msgstr "Desligar esta rede" + +#~ msgid "Wireless restarted" +#~ msgstr "Rede wireless reiniciada" + +#~ msgid "Wireless shut down" +#~ msgstr "Desligar wireless" + #~ msgid "DHCP Leases" #~ msgstr "Concessões DHCP" diff --git a/luci-base/po/ro/base.po b/luci-base/po/ro/base.po index 2ca23e047..109550a90 100644 --- a/luci-base/po/ro/base.po +++ b/luci-base/po/ro/base.po @@ -154,9 +154,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Max. interogari simultane" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -216,9 +213,6 @@ msgstr "Punct de Acces" msgid "Actions" msgstr "Actiune" -msgid "Activate this network" -msgstr "Activeaza aceasta retea" - msgid "Active IPv4-Routes" msgstr "Rute active IPv4" @@ -270,6 +264,18 @@ msgstr "" msgid "Alert" msgstr "Alerta" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -282,6 +288,9 @@ msgid "Allow SSH password authentication" msgstr "" "Permite autentificarea prin parola a SSH " +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Permite toate cu exceptia celor listate" @@ -314,6 +323,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -490,12 +504,12 @@ msgstr "Inapoi la vedere generala" msgid "Back to scan results" msgstr "Inapoi la rezultatele scanarii" +msgid "Backup" +msgstr "Salveaza" + msgid "Backup / Flash Firmware" msgstr "Salveaza / Scrie Firmware" -msgid "Backup / Restore" -msgstr "Salveaza / Restaureaza" - msgid "Backup file list" msgstr "Salveaza lista fisiere" @@ -505,6 +519,9 @@ msgstr "Adresa specificata gresit !" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -558,6 +575,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Utilizarea procesorului (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Anuleaza" @@ -622,8 +642,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -659,6 +678,9 @@ msgstr "" msgid "Configuration" msgstr "Configurare" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Fisierele de configurare vor fi pastrate." @@ -680,6 +702,9 @@ msgstr "Conectat" msgid "Connection Limit" msgstr "Limita de conexiune" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Conexiuni" @@ -791,6 +816,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -827,6 +855,9 @@ msgstr "Sterge" msgid "Delete this network" msgstr "Sterge aceasta retea" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Descriere" @@ -845,10 +876,10 @@ msgstr "Configurarea dispozitivului" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -876,15 +907,24 @@ msgstr "Dezactiveaza configuratia DNS" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Dezactivat" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1166,6 +1206,9 @@ msgstr "Filtreaza privatele" msgid "Filter useless" msgstr "Filtreaza nefolositele" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1219,6 +1262,9 @@ msgstr "" msgid "Force" msgstr "Forteaza" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Forteaza CCMP (AES)" @@ -1282,6 +1328,9 @@ msgstr "Doar GPRS" msgid "Gateway" msgstr "Gateway" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Porturile gateway" @@ -1354,9 +1403,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "Ascunde ESSID" @@ -1372,6 +1418,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Numele de host" @@ -1393,6 +1442,12 @@ msgstr "" msgid "IP address" msgstr "Adresa IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1556,6 +1611,9 @@ msgstr "Intrare:" msgid "Info" msgstr "Informatii" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Script de initializare" @@ -1592,21 +1650,12 @@ msgstr "Prezentare interfata" msgid "Interface is reconnecting..." msgstr "Interfata se reconecteaza.." -msgid "Interface is shutting down..." -msgstr "Interfata se opreste.." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "Interfata nu e prezenta sau nu este conectata inca." -msgid "Interface reconnected" -msgstr "Interfata reconectata" - -msgid "Interface shut down" -msgstr "Interfata oprita" - msgid "Interfaces" msgstr "Interfete" @@ -1795,6 +1844,9 @@ msgstr "Incarcarea medie" msgid "Loading" msgstr "Incarcare" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1859,6 +1911,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1874,6 +1929,9 @@ msgstr "" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1953,6 +2011,9 @@ msgstr "" msgid "Modem device" msgstr "" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2048,6 +2109,9 @@ msgstr "Utilitare de retea" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2069,6 +2133,9 @@ msgstr "Nici un fisier gasit" msgid "No information available" msgstr "Nici o informatie disponibila" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2087,6 +2154,9 @@ msgstr "Nici o parola setata !" msgid "No rules in this chain" msgstr "" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2215,6 +2285,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2293,6 +2366,9 @@ msgstr "PID" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2380,6 +2456,9 @@ msgstr "Maxim:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2448,9 +2527,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2499,6 +2575,11 @@ msgstr "" msgid "Quality" msgstr "Calitate" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2517,9 +2598,6 @@ msgstr "RX" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2538,6 +2616,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2558,16 +2639,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2613,9 +2684,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "Reconecteaza aceasta interfata" -msgid "Reconnecting interface" -msgstr "Interfata se reconecteaza chiar acum" - msgid "References" msgstr "Referinte" @@ -2704,6 +2772,12 @@ msgstr "Restart" msgid "Restart Firewall" msgstr "Restarteaza firewallul" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Restaureaza" + msgid "Restore backup" msgstr "Reface backup-ul" @@ -2790,6 +2864,9 @@ msgstr "Salveaza si aplica" msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Operatiuni programate" @@ -2831,6 +2908,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Configurare sincronizare timp" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Seteaza serverul DHCP" @@ -2840,15 +2923,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "Opreste aceasta interfata" -msgid "Shutdown this network" -msgstr "Opreste aceasta retea" - msgid "Signal" msgstr "Semnal" @@ -2944,6 +3027,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "Pornire" @@ -3090,6 +3176,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3272,7 +3361,8 @@ msgstr "Fusul orar" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3341,9 +3431,27 @@ msgstr "" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3353,6 +3461,9 @@ msgstr "Necunoscut" msgid "Unknown Error, password not changed!" msgstr "Eroare necunoscuta, parola neschimbata !" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "Neadministrate" @@ -3362,6 +3473,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Modificari nesalvate" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Tipul de protocol neacceptat." @@ -3498,6 +3615,9 @@ msgstr "" msgid "Version" msgstr "Versiune" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3567,8 +3687,11 @@ msgstr "Sumarul wireless" msgid "Wireless Security" msgstr "Securitate wireless" -msgid "Wireless is disabled or not associated" -msgstr "Wireless-ul este dezactivat sau ne-asociat" +msgid "Wireless is disabled" +msgstr "Wireless-ul este dezactivat" + +msgid "Wireless is not associated" +msgstr "Wireless-ul este ne-asociat" msgid "Wireless is restarting..." msgstr "Wireless-ul se restarteaza.." @@ -3579,12 +3702,6 @@ msgstr "Reteaua wireless este dezactivata" msgid "Wireless network is enabled" msgstr "Reteaua wireless este activata" -msgid "Wireless restarted" -msgstr "Wireless-ul restartat" - -msgid "Wireless shut down" -msgstr "Wireless-ul oprit" - msgid "Write received DNS requests to syslog" msgstr "Scrie cererile DNS primite in syslog" @@ -3684,6 +3801,9 @@ msgstr "" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "nu" @@ -3759,6 +3879,33 @@ msgstr "da" msgid "« Back" msgstr "« Inapoi" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Activeaza aceasta retea" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Interfata se opreste.." + +#~ msgid "Interface reconnected" +#~ msgstr "Interfata reconectata" + +#~ msgid "Interface shut down" +#~ msgstr "Interfata oprita" + +#~ msgid "Reconnecting interface" +#~ msgstr "Interfata se reconecteaza chiar acum" + +#~ msgid "Shutdown this network" +#~ msgstr "Opreste aceasta retea" + +#~ msgid "Wireless restarted" +#~ msgstr "Wireless-ul restartat" + +#~ msgid "Wireless shut down" +#~ msgstr "Wireless-ul oprit" + #~ msgid "DHCP Leases" #~ msgstr "Conexiuni DHCP" diff --git a/luci-base/po/ru/base.po b/luci-base/po/ru/base.po index 7d167e610..4f4077098 100644 --- a/luci-base/po/ru/base.po +++ b/luci-base/po/ru/base.po @@ -3,12 +3,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: LuCI: base\n" "POT-Creation-Date: 2010-05-09 01:01+0300\n" -"PO-Revision-Date: 2018-01-24 15:00+0300\n" +"PO-Revision-Date: 2018-07-21 08:10+0300\n" "Language-Team: http://cyber-place.ru\n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.7.1\n" -"Last-Translator: Vladimir aka sunny \n" +"Last-Translator: Anton Kikin \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Language: ru\n" @@ -16,10 +16,10 @@ msgstr "" "интерфейс, все проверялось в графическом режиме, совместим с другими apps\n" msgid "%.1f dB" -msgstr "%.1f dB" +msgstr "%.1f дБ" msgid "%s is untagged in multiple VLANs!" -msgstr "%s is untagged in multiple VLANs!" +msgstr "%s не тегирован в множестве VLAN!" msgid "(%d minute window, %d second interval)" msgstr "(%d минутное окно, %d секундный интервал)" @@ -52,7 +52,7 @@ msgid "-- match by uuid --" msgstr "-- проверка по uuid --" msgid "-- please select --" -msgstr "" +msgstr "-- сделайте выбор --" msgid "1 Minute Load:" msgstr "Загрузка за 1 минуту:" @@ -61,7 +61,7 @@ msgid "15 Minute Load:" msgstr "Загрузка за 15 минут:" msgid "4-character hexadecimal ID" -msgstr "4-х значное шестнадцатеричное ID" +msgstr "4-х значный шестнадцатеричный ID" msgid "464XLAT (CLAT)" msgstr "464XLAT (CLAT)" @@ -70,7 +70,7 @@ msgid "5 Minute Load:" msgstr "Загрузка за 5 минут:" msgid "6-octet identifier as a hex string - no colons" -msgstr "6-октетный идентификатор в виде шестнадцатеричной строки-без двоеточий" +msgstr "6-октетный идентификатор в виде шестнадцатеричной строки без двоеточий" msgid "802.11r Fast Transition" msgstr "802.11r Быстрый Роуминг" @@ -110,34 +110,34 @@ msgid "ESSID" msgstr "ESSID" msgid "IPv4-Address" -msgstr "IPv4-Адрес" +msgstr "IPv4-адрес" msgid "IPv4-Gateway" -msgstr "IPv4-Шлюз" +msgstr "IPv4-шлюз" msgid "IPv4-Netmask" -msgstr "IPv4-Маска сети" +msgstr "IPv4-маска сети" msgid "" "IPv6-Address or Network " "(CIDR)" msgstr "" -"IPv6-Адрес или Сеть (CIDR)" +"IPv6-адрес или сеть (CIDR)" msgid "IPv6-Gateway" -msgstr "IPv6-Шлюз" +msgstr "IPv6-шлюз" msgid "IPv6-Suffix (hex)" -msgstr "IPv6-Суффикс (hex)" +msgstr "IPv6-суффикс (hex)" msgid "LED Configuration" msgstr "Настройка LED индикации" msgid "LED Name" -msgstr "LED Имя" +msgstr "Имя LED" msgid "MAC-Address" -msgstr "MAC-Адрес" +msgstr "MAC-адрес" msgid "DUID" msgstr "DUID" @@ -146,7 +146,7 @@ msgid "" "Max. DHCP leases" msgstr "" -"Макс. кол-во аренд
      Макс. кол-во аренд DHCP аренды" msgid "" @@ -158,11 +158,7 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -"Макс. кол-во
      одновременных
      запросов" - -msgid "%s - %s" -msgstr "%s - %s" +"Макс. кол-во одновременных запросов" msgid "" "
      Note: you need to manually restart the cron service if the crontab file " @@ -190,16 +186,16 @@ msgid "ARP retry threshold" msgstr "Порог повтора ARP" msgid "ATM (Asynchronous Transfer Mode)" -msgstr "ATM (Режим Асинхронной Передачи)" +msgstr "ATM (режим асинхронной передачи)" msgid "ATM Bridges" -msgstr "ATM Мосты" +msgstr "ATM мосты" msgid "ATM Virtual Channel Identifier (VCI)" -msgstr "ATM Идентификатор Виртуального Канала (VCI)" +msgstr "ATM идентификатор виртуального канала (VCI)" msgid "ATM Virtual Path Identifier (VPI)" -msgstr "ATM Идентификатор Виртуального Пути(VPI)" +msgstr "ATM идентификатор виртуального пути (VPI)" msgid "" "ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " @@ -214,7 +210,7 @@ msgid "ATM device number" msgstr "ATM номер устройства" msgid "ATU-C System Vendor ID" -msgstr "ATU-C System Vendor ID" +msgstr "ATU-C идентификатор производителя" msgid "Access Concentrator" msgstr "Концентратор доступа" @@ -225,14 +221,11 @@ msgstr "Точка доступа" msgid "Actions" msgstr "Действия" -msgid "Activate this network" -msgstr "Активировать эту сеть" - msgid "Active IPv4-Routes" -msgstr "Active IPv4-Маршруты" +msgstr "Active IPv4-маршруты" msgid "Active IPv6-Routes" -msgstr "Active IPv6-Маршруты" +msgstr "Active IPv6-маршруты" msgid "Active Connections" msgstr "Активные соединения" @@ -257,10 +250,10 @@ msgid "Add new interface..." msgstr "Добавить новый интерфейс" msgid "Additional Hosts files" -msgstr "Дополнительный
      hosts файл" +msgstr "Дополнительный hosts файл" msgid "Additional servers file" -msgstr "Дополнительные
      файлы серверов" +msgstr "Дополнительные файлы серверов" msgid "Address" msgstr "Адрес" @@ -275,11 +268,23 @@ msgid "Advanced Settings" msgstr "Дополнительные настройки" msgid "Aggregate Transmit Power(ACTATP)" -msgstr "Aggregate Transmit Power(ACTATP)" +msgstr "Aggregate Transmit Power (ACTATP)" msgid "Alert" msgstr "Тревога" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -287,18 +292,21 @@ msgstr "" "Выделять IP адреса последовательно, начинать с меньшего доступного адреса." msgid "Allocate IP sequentially" -msgstr "IP последовательно" +msgstr "Выделять IP-адреса последовательно" msgid "Allow SSH password authentication" msgstr "" "Разрешить SSH аутентификацию с помощью " "пароля." +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Разрешить все, кроме перечисленных" msgid "Allow legacy 802.11b rates" -msgstr "Разрешить использование
      стандарта 802.11b" +msgstr "Разрешить использование стандарта 802.11b" msgid "Allow listed only" msgstr "Разрешить только перечисленные" @@ -328,7 +336,12 @@ msgid "Allowed IPs" msgstr "Разрешенные IP-адреса" msgid "Always announce default router" -msgstr "Объявлять всегда, как дефолтный маршрутизатор" +msgstr "Объявлять всегда, как маршрутизатор по умолчанию" + +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" msgid "Annex" msgstr "Annex" @@ -408,13 +421,13 @@ msgid "Any zone" msgstr "Любая зона" msgid "Apply request failed with status %h" -msgstr "" +msgstr "Ошибка %h запроса на применение" msgid "Apply unchecked" -msgstr "" +msgstr "Применить без проверки" msgid "Architecture" -msgstr "" +msgstr "Архитектура" msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" @@ -435,7 +448,7 @@ msgid "Associated Stations" msgstr "Подключенные клиенты" msgid "Associations" -msgstr "" +msgstr "Ассоциации" msgid "Auth Group" msgstr "Группа аутентификации" @@ -480,7 +493,7 @@ msgid "Automount Filesystem" msgstr "Hotplug раздела" msgid "Automount Swap" -msgstr "Hotplug swap-а" +msgstr "Hotplug swap раздела" msgid "Available" msgstr "Доступно" @@ -507,23 +520,23 @@ msgid "Back" msgstr "Назад" msgid "Back to Overview" -msgstr "Назад в меню" +msgstr "Назад к обзору" msgid "Back to configuration" -msgstr "Назад к настройке" +msgstr "Назад к настройкам" msgid "Back to overview" -msgstr "назад в меню" +msgstr "Назад к обзору" msgid "Back to scan results" msgstr "Назад к результатам поиска" +msgid "Backup" +msgstr "Резервное копирование" + msgid "Backup / Flash Firmware" msgstr "Резервное копирование / Перепрошивка" -msgid "Backup / Restore" -msgstr "Резервное копирование / Восстановление" - msgid "Backup file list" msgstr "Список файлов для резервного копирования" @@ -533,6 +546,9 @@ msgstr "Указан неправильный адрес!" msgid "Band" msgstr "Диапазон" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -594,6 +610,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Загрузка ЦП (%)" +msgid "Call failed" +msgstr "Ошибка вызова" + msgid "Cancel" msgstr "Отменить" @@ -610,7 +629,7 @@ msgid "Changes applied." msgstr "Изменения приняты." msgid "Changes have been reverted." -msgstr "" +msgstr "Изменения были возвращены назад." msgid "Changes the administrator password for accessing the device" msgstr "Изменить пароль администратора для доступа к устройству." @@ -622,12 +641,14 @@ msgid "" "Channel %d is not available in the %s regulatory domain and has been auto-" "adjusted to %d." msgstr "" +"Канал %d не доступен в регуляторном домене %s и был автоматически изменен на " +"%d." msgid "Check" msgstr "Проверить" msgid "Check filesystems before mount" -msgstr "Проверка" +msgstr "Проверка файловых систем перед монтированием" msgid "Check this option to delete the existing networks from this radio." msgstr "" @@ -643,7 +664,7 @@ msgid "" "fill out the create field to define a new zone and attach the " "interface to it." msgstr "" -"Укажите зону, которую вы хотите прикрепить к этому интерфейсу.
      Выберите " +"Укажите зону, которую вы хотите прикрепить к этому интерфейсу. Выберите " "'не определено', чтобы удалить этот интерфейс из зоны, или " "заполните поле 'создать', чтобы определить новую зону и прикрепить " "к ней этот интерфейс." @@ -660,17 +681,14 @@ msgid "Cipher" msgstr "Алгоритм шифрования" msgid "Cisco UDP encapsulation" -msgstr "формирование пакетов данных Cisco UDP " +msgstr "Формирование пакетов данных Cisco UDP " msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Нажмите 'Создать архив', чтобы загрузить tar-архив текущих config файлов " -"прошивки устройства, таким образом вы сохраните его настройки. Для сброса " -"настроек прошивки к исходному состоянию нажмите 'Выполнить сброс' (возможно " -"только для squashfs-образов)." +"прошивки устройства, таким образом вы сохраните его настройки." msgid "Client" msgstr "Клиент" @@ -711,14 +729,17 @@ msgstr "" msgid "Configuration" msgstr "Настройка config файла" +msgid "Configuration failed" +msgstr "Ошибка конфигурации" + msgid "Configuration files will be kept." msgstr "Config файлы будут сохранены." msgid "Configuration has been applied." -msgstr "" +msgstr "Конфигурация применена" msgid "Configuration has been rolled back!" -msgstr "" +msgstr "Конфигурация возвращена назад!" msgid "Confirmation" msgstr "Подтверждение пароля" @@ -732,6 +753,9 @@ msgstr "Подключен" msgid "Connection Limit" msgstr "Ограничение соединений" +msgid "Connection attempt failed" +msgstr "Ошибка попытки соединения" + msgid "Connections" msgstr "Соединения" @@ -740,6 +764,9 @@ msgid "" "changes. You might need to reconnect if you modified network related " "settings such as the IP address or wireless security credentials." msgstr "" +"Не удалось восстановить доступ к устройству после применения конфигурации. " +"Возможно вам придется подключиться заново, если вы изменили сетевые " +"настройки, такие как IP-адрес или параметры доступа к беспроводной сети." msgid "Country" msgstr "Страна" @@ -754,7 +781,7 @@ msgid "Cover the following interfaces" msgstr "Включить следующие интерфейсы" msgid "Create / Assign firewall-zone" -msgstr "Создать / назначить
      зону сетевого экрана" +msgstr "Создать / назначить зону сетевого экрана" msgid "Create Interface" msgstr "Создать интерфейс" @@ -778,7 +805,7 @@ msgid "" "Custom feed definitions, e.g. private feeds. This file can be preserved in a " "sysupgrade." msgstr "" -"Custom-ные feed-ы - это пользовательские feed-ы. Этот файл может быть " +"Custom-ные feed-ы — это пользовательские feed-ы. Этот файл может быть " "сохранен при перепрошивке sysupgrade-совместимым образом." msgid "Custom feeds" @@ -788,13 +815,15 @@ msgid "" "Custom files (certificates, scripts) may remain on the system. To prevent " "this, perform a factory-reset first." msgstr "" +"Пользовательские файлы (сертификаты, скрипты) могут остаться в системе. " +"Чтобы этого не произошло, выполните сначала сброс к заводским настройкам." msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" "Настройка поведения светодиодной индикации LEDs устройства, если это возможно." +"abbr> устройства, если это возможно." msgid "DHCP Server" msgstr "DHCP-сервер" @@ -806,22 +835,22 @@ msgid "DHCP client" msgstr "DHCP-клиент" msgid "DHCP-Options" -msgstr "DHCP-Настройки" +msgstr "DHCP настройки" msgid "DHCPv6 client" msgstr "DHCPv6 клиент" msgid "DHCPv6-Mode" -msgstr "DHCPv6-Режим" +msgstr "DHCPv6 режим" msgid "DHCPv6-Service" -msgstr "DHCPv6-Сервис" +msgstr "DHCPv6 сервис" msgid "DNS" msgstr "DNS" msgid "DNS forwardings" -msgstr "Перенаправление
      запросов DNS" +msgstr "Перенаправление запросов DNS" msgid "DNS-Label / FQDN" msgstr "DNS-Label / FQDN" @@ -847,6 +876,9 @@ msgstr "Состояние DSL" msgid "DSL line mode" msgstr "DSL линейный режим" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -863,7 +895,7 @@ msgid "Default gateway" msgstr "Шлюз по умолчанию" msgid "Default is stateless + stateful" -msgstr "Значение по умолчанию - 'stateless + stateful'." +msgstr "Значение по умолчанию — 'stateless + stateful'." msgid "Default state" msgstr "Начальное состояние" @@ -886,6 +918,9 @@ msgstr "Удалить" msgid "Delete this network" msgstr "Удалить эту сеть" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Описание" @@ -904,11 +939,11 @@ msgstr "Настройка устройства" msgid "Device is rebooting..." msgstr "Перезагрузка..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Устройство недоступно" -msgid "Device unreachable!" -msgstr "" +msgid "Device unreachable! Still waiting for device..." +msgstr "Устройство недоступно! Ожидание устройства..." msgid "Diagnostics" msgstr "Диагностика" @@ -935,17 +970,26 @@ msgstr "Отключить DNS настройки" msgid "Disable Encryption" msgstr "Отключить шифрование" +msgid "Disable this network" +msgstr "Отключить данную сеть" + msgid "Disabled" msgstr "Отключено" msgid "Disabled (default)" msgstr "Отключено (по умолчанию)" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "Отбрасывать ответы внешней сети RFC1918." +msgid "Disconnection attempt failed" +msgstr "Ошибка попытки отключения" + msgid "Dismiss" -msgstr "" +msgstr "Отклонить" msgid "Displaying only packages containing" msgstr "Показываются только пакеты, содержащие" @@ -1001,7 +1045,7 @@ msgstr "" "без DNS-имени." msgid "Down" -msgstr "" +msgstr "Вниз" msgid "Download and install package" msgstr "Загрузить и установить пакет" @@ -1013,13 +1057,13 @@ msgid "Downstream SNR offset" msgstr "SNR offset внутренней сети" msgid "Dropbear Instance" -msgstr "Исключение Dropbear" +msgstr "Экземпляр Dropbear" msgid "" "Dropbear offers SSH network shell access " "and an integrated SCP server" msgstr "" -"Dropbear - это SSH-сервер со встроенным " +"Dropbear — это SSH-сервер со встроенным " "SCP." msgid "Dual-Stack Lite (RFC6333)" @@ -1071,6 +1115,8 @@ msgid "" "Enable IGMP " "snooping" msgstr "" +"Включить IGMP " +"snooping" msgid "Enable STP" msgstr "Включить STP" @@ -1103,7 +1149,7 @@ msgid "Enable WPS pushbutton, requires WPA(2)-PSK" msgstr "Включить WPS при нажатии на кнопку, в режиме WPA(2)-PSK" msgid "Enable key reinstallation (KRACK) countermeasures" -msgstr "Включить защиту
      от атаки KRACK" +msgstr "Включить защиту от атаки KRACK" msgid "Enable learning and aging" msgstr "Включить изучение и устаревание (learning/aging)" @@ -1118,10 +1164,10 @@ msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." msgstr "Включите флаг DF (не Фрагментировать) инкапсулирующих пакетов." msgid "Enable this mount" -msgstr "Включить эту
      точку монтирования" +msgstr "Включить эту точку монтирования" msgid "Enable this network" -msgstr "" +msgstr "Включить данную сеть" msgid "Enable this swap" msgstr "Включить этот раздел подкачки" @@ -1133,7 +1179,7 @@ msgid "Enabled" msgstr "Включено" msgid "Enables IGMP snooping on this bridge" -msgstr "" +msgstr "Включает IGMP snooping на данном мосту" msgid "" "Enables fast roaming among access points that belong to the same Mobility " @@ -1158,10 +1204,10 @@ msgid "Endpoint Port" msgstr "Конечная точка Порта" msgid "Enter custom value" -msgstr "" +msgstr "Введите пользовательское значение" msgid "Enter custom values" -msgstr "" +msgstr "Введите пользовательские значения" msgid "Erasing..." msgstr "Стирание..." @@ -1203,13 +1249,13 @@ msgid "External R1 Key Holder List" msgstr "Внешний R0 Key Holder List" msgid "External system log server" -msgstr "Внешний сервер
      системного журнала" +msgstr "Внешний сервер системного журнала" msgid "External system log server port" msgstr "Порт внешнего сервера системного журнала" msgid "External system log server protocol" -msgstr "Внешний протокол
      лог-сервера" +msgstr "Внешний протокол лог-сервера" msgid "Extra SSH command options" msgstr "Дополнительные опции команды SSH" @@ -1225,6 +1271,7 @@ msgstr "FT протокол" msgid "Failed to confirm apply within %ds, waiting for rollback…" msgstr "" +"Не удалось подтвердить применение в течении %d сек., ожидание отката..." msgid "File" msgstr "Файл" @@ -1244,6 +1291,9 @@ msgstr "Фильтровать частные" msgid "Filter useless" msgstr "Фильтровать бесполезные" +msgid "Finalizing failed" +msgstr "Ошибка финализации" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1300,6 +1350,9 @@ msgstr "Прошивка..." msgid "Force" msgstr "Назначить" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Назначить CCMP (AES)" @@ -1364,6 +1417,9 @@ msgstr "Только GPRS" msgid "Gateway" msgstr "Шлюз" +msgid "Gateway address is invalid" +msgstr "Неверный адрес шлюза" + msgid "Gateway ports" msgstr "Порты шлюза" @@ -1422,7 +1478,7 @@ msgid "Hang Up" msgstr "Перезапустить" msgid "Header Error Code Errors (HEC)" -msgstr "Ошибки кода ошибки заголовка (HEC)" +msgstr "Ошибки контроля ошибок заголовка (HEC)" msgid "" "Here you can configure the basic aspects of your device like its hostname or " @@ -1438,9 +1494,6 @@ msgstr "" "Здесь вы можете добавить открытые SSH ключи (один ключ на строку) для SSH " "аутентификации." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Беспроводной 802.11b контроллер Hermes" - msgid "Hide ESSID" msgstr "Скрыть ESSID" @@ -1456,6 +1509,9 @@ msgstr "Время ожидания хоста" msgid "Host-IP or Network" msgstr "IP-адрес или сеть" +msgid "Host-Uniq tag content" +msgstr "Содержимое Host-Uniq тега" + msgid "Hostname" msgstr "Имя хоста" @@ -1472,11 +1528,17 @@ msgid "IKE DH Group" msgstr "IKE DH Group" msgid "IP Addresses" -msgstr "IP-Адреса" +msgstr "IP-адреса" msgid "IP address" msgstr "IP-адрес" +msgid "IP address in invalid" +msgstr "Неверный IP-адрес" + +msgid "IP address is missing" +msgstr "IP-адрес не указан" + msgid "IPv4" msgstr "IPv4" @@ -1484,7 +1546,7 @@ msgid "IPv4 Firewall" msgstr "Межсетевой экран IPv4" msgid "IPv4 Upstream" -msgstr "" +msgstr "Основной IPv4" msgid "IPv4 address" msgstr "IPv4-адрес" @@ -1496,7 +1558,7 @@ msgid "IPv4 assignment length" msgstr "IPv4 assignment length" msgid "IPv4 broadcast" -msgstr "Широковещательный
      IPv4-адрес" +msgstr "Широковещательный IPv4-адрес" msgid "IPv4 gateway" msgstr "IPv4-адрес шлюза" @@ -1535,7 +1597,7 @@ msgid "IPv6 ULA-Prefix" msgstr "IPv6 ULA-Prefix" msgid "IPv6 Upstream" -msgstr "" +msgstr "Основной IPv6" msgid "IPv6 address" msgstr "IPv6-адрес" @@ -1583,23 +1645,23 @@ msgid "Identity" msgstr "Идентификация EAP" msgid "If checked, 1DES is enabled" -msgstr "Если выбрано, что 1DES включено" +msgstr "Если выбрано, то 1DES включено" msgid "If checked, encryption is disabled" -msgstr "Если проверено, что шифрование выключено" +msgstr "Если выбрано, то шифрование выключено" msgid "" "If specified, mount the device by its UUID instead of a fixed device node" msgstr "" -"Если выбрано монтировать устройство используя его UUID, вместо " -"фиксированного файла устройства." +"Если выбрано, монтировать устройство используя его UUID, а не фиксированный " +"файл устройства." msgid "" "If specified, mount the device by the partition label instead of a fixed " "device node" msgstr "" -"Если выбрано монтировать устройство используя название его раздела, вместо " -"фиксированного файла устройства." +"Если выбрано, монтировать устройство используя название его раздела, а не " +"фиксированный файл устройства." msgid "If unchecked, no default route is configured" msgstr "Если не выбрано, то маршрут по умолчанию не настраивается." @@ -1616,19 +1678,19 @@ msgid "" msgstr "" "Если физической памяти не достаточно, то неиспользуемые данные могут быть " "временно перемещены в раздел подкачки, что в свою очередь приведет к " -"увеличению объёму свободной RAM." -"
      Однако, перемещение в файл - это достаточно долгий процесс, так как " +"увеличению объёму свободной RAM. " +"Однако, перемещение в файл — это достаточно долгий процесс, так как " "устройство, на котором располагается раздел подкачки, работает гораздо " "медленнее, чем RAM." msgid "Ignore /etc/hosts" -msgstr "Игнорировать
      /etc/hosts" +msgstr "Игнорировать /etc/hosts" msgid "Ignore interface" msgstr "Игнорировать интерфейс" msgid "Ignore resolve file" -msgstr "Игнорировать
      файл resolv" +msgstr "Игнорировать файл resolv" msgid "Image" msgstr "Образ" @@ -1653,6 +1715,9 @@ msgstr "Входящий:" msgid "Info" msgstr "Информация" +msgid "Initialization failure" +msgstr "Ошибка инициализации" + msgid "Initscript" msgstr "Скрипт инициализации" @@ -1689,21 +1754,12 @@ msgstr "Список интерфейсов" msgid "Interface is reconnecting..." msgstr "Интерфейс переподключается..." -msgid "Interface is shutting down..." -msgstr "Интерфейс отключается..." - msgid "Interface name" msgstr "Имя интерфейса" msgid "Interface not present or not connected yet." msgstr "Интерфейс не существует или пока не подключен." -msgid "Interface reconnected" -msgstr "Интерфейс переподключен" - -msgid "Interface shut down" -msgstr "Интерфейс отключен" - msgid "Interfaces" msgstr "Интерфейсы" @@ -1738,7 +1794,7 @@ msgstr "" "не помещается в чип флэш-памяти, проверьте ваш файл прошивки!" msgid "JavaScript required!" -msgstr "Требуется Java скрипт!" +msgstr "Требуется JavaScript!" msgid "Join Network" msgstr "Подключение к сети" @@ -1907,8 +1963,11 @@ msgstr "Средняя загрузка" msgid "Loading" msgstr "Загрузка" +msgid "Local IP address is invalid" +msgstr "Неверный локальный IP-адрес" + msgid "Local IP address to assign" -msgstr "Присвоение локального IP адреса" +msgstr "Присвоение локального IP-адреса" msgid "Local IPv4 address" msgstr "Локальный IPv4-адрес" @@ -1933,8 +1992,8 @@ msgid "" "and are resolved from DHCP or hosts files only" msgstr "" "Согласно требованиям, имена соответствующие этому домену, никогда не " -"передаются.
      И разрешаются только из файла DHCP(/etc/config/dhcp) или " -"файла хостов (/etc/hosts)." +"передаются. И разрешаются только из файла DHCP (/etc/config/dhcp) или файла " +"хостов (/etc/hosts)." msgid "Local domain suffix appended to DHCP names and hosts file entries" msgstr "" @@ -1978,6 +2037,9 @@ msgstr "Потеря сигнала в секундах (LOSS)" msgid "Lowest leased address as offset from the network address." msgstr "Минимальный адрес аренды." +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-адрес" @@ -1993,6 +2055,9 @@ msgstr "Список MAC" msgid "MAP / LW4over6" msgstr "MAP / LW4over6" +msgid "MAP rule is invalid" +msgstr "Неверное MAP правило" + msgid "MB/s" msgstr "МБ/с" @@ -2009,8 +2074,8 @@ msgid "" "Make sure to clone the root filesystem using something like the commands " "below:" msgstr "" -"Прежде чем перенести корень на внешний носитель, используйте команды " -"приведенные ниже:" +"Прежде чем перенести корневую файловую систему на внешний носитель, " +"используйте команды приведенные ниже:" msgid "Manual" msgstr "Вручную" @@ -2076,6 +2141,9 @@ msgstr "Модель" msgid "Modem device" msgstr "Модем" +msgid "Modem information query failed" +msgstr "Ошибка запроса информации о модеме" + msgid "Modem init timeout" msgstr "Время ожидания инициализации модема" @@ -2092,10 +2160,10 @@ msgid "Mount Points" msgstr "Монтирование разделов" msgid "Mount Points - Mount Entry" -msgstr "Точки монтирования - Настройка разделов" +msgstr "Точки монтирования — Настройка разделов" msgid "Mount Points - Swap Entry" -msgstr "Точки монтирования - Настройка Swap" +msgstr "Точки монтирования — Настройка Swap" msgid "" "Mount Points define at which point a memory device will be attached to the " @@ -2173,6 +2241,9 @@ msgstr "Сетевые утилиты" msgid "Network boot image" msgstr "Образ системы для сетевой загрузки" +msgid "Network device is not present" +msgstr "Нет сетевого устройства" + msgid "Network without interfaces." msgstr "Сеть без интерфейсов." @@ -2183,7 +2254,7 @@ msgid "No DHCP Server configured for this interface" msgstr "DHCP-сервер не настроен для этого интерфейса" msgid "No NAT-T" -msgstr "не NAT-T" +msgstr "Без NAT-T" msgid "No chains in this table" msgstr "Нет цепочек в этой таблице" @@ -2194,8 +2265,11 @@ msgstr "Файлы не найдены" msgid "No information available" msgstr "Нет доступной информации" +msgid "No matching prefix delegation" +msgstr "Отсутствует соответствующая делегация префикса" + msgid "No negative cache" -msgstr "Отключить кэш
      отрицательных ответов" +msgstr "Отключить кэш отрицательных ответов" msgid "No network configured on this device" msgstr "Не настроена сеть на устройстве" @@ -2212,6 +2286,9 @@ msgstr "Пароль не установлен!" msgid "No rules in this chain" msgstr "Нет правил в данной цепочке" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "Зона не присвоена" @@ -2246,7 +2323,7 @@ msgid "Not connected" msgstr "Не подключено" msgid "Note: Configuration files will be erased." -msgstr "Примечание: config файлы будут удалены." +msgstr "Внимание: config файлы будут удалены." msgid "Note: interface name length" msgstr "Внимание: длина имени интерфейса" @@ -2259,6 +2336,8 @@ msgstr "DNS-запрос" msgid "Number of cached DNS entries (max is 10000, 0 is no caching)" msgstr "" +"Количество кэшированных DNS записей (максимум — 10000, 0 — отключить " +"кэширование)" msgid "OK" msgstr "OK" @@ -2273,7 +2352,7 @@ msgid "Obfuscated Password" msgstr "Obfuscated Password" msgid "Obtain IPv6-Address" -msgstr "" +msgstr "Получение IPv6-адреса" msgid "Off-State Delay" msgstr "Задержка выключенного состояния" @@ -2286,9 +2365,9 @@ msgid "" "INTERFACE.VLANNR (e.g.: " "eth0.1)." msgstr "" -"На этой странице вы можете настроить сетевые интерфейсы.
      Вы можете " +"На этой странице вы можете настроить сетевые интерфейсы. Вы можете " "объединить несколько интерфейсов в мост, выбрав опцию 'Объединить в мост' и " -"введя список интерфейсов, разделенных пробелами.
      Вы также можете " +"введя список интерфейсов, разделенных пробелами. Вы также можете " "использовать VLAN-" "обозначения вида ИНТЕРФЕЙС.НОМЕРVLAN (напр.: eth0.1)." @@ -2340,9 +2419,9 @@ msgid "" "for the interface." msgstr "" "Необязательно. Допустимые значения: 'eui64', 'random', фиксированное " -"значение например '::1' или '::1:2'.
      Когда IPv6 префикс такой как - ('a:" -"b:c:d::'), используйте суффикс на вроде ('::1') для этого IPv6 адреса ('a:b:" -"c:d::1') для этого интерфейса." +"значение например '::1' или '::1:2'. Когда IPv6 префикс такой как — ('a:b:c:" +"d::'), используйте суффикс на вроде ('::1') для этого IPv6 адреса ('a:b:c:" +"d::1') для этого интерфейса." msgid "" "Optional. Base64-encoded preshared key. Adds in an additional layer of " @@ -2355,6 +2434,9 @@ msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" "Необязательно. Создавать маршруты для разрешенных IP адресов для этого узла." +msgid "Optional. Description of peer." +msgstr "Необязательно. Описание узла." + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2423,7 +2505,7 @@ msgid "Override the table used for internal routes" msgstr "Назначить таблицу внутренних маршрутов" msgid "Overview" -msgstr "Главное меню" +msgstr "Обзор" msgid "Owner" msgstr "Пользователь" @@ -2440,6 +2522,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "PIN код отвергнут" + msgid "PMK R1 Push" msgstr "PMK R1 Push" @@ -2527,6 +2612,9 @@ msgstr "Пиковая:" msgid "Peer IP address to assign" msgstr "Запрос IP адреса назначения" +msgid "Peer address is missing" +msgstr "Отсутствует адрес пира" + msgid "Peers" msgstr "Пиры" @@ -2552,7 +2640,7 @@ msgid "Ping" msgstr "Пинг-запрос" msgid "Pkts." -msgstr "Пакетов." +msgstr "Пакетов" msgid "Please enter your username and password." msgstr "Введите логин и пароль." @@ -2597,9 +2685,6 @@ msgstr "Запретить прослушивание этих интерфей msgid "Prevents client-to-client communication" msgstr "Не позволяет клиентам обмениваться друг с другом информацией." -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Беспроводной 802.11b контроллер Prism2/2.5/3" - msgid "Private Key" msgstr "Приватный ключ" @@ -2650,6 +2735,11 @@ msgstr "QMI сотовый" msgid "Quality" msgstr "Качество" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "R0 Key время жизни" @@ -2668,9 +2758,6 @@ msgstr "Получение (RX)" msgid "RX Rate" msgstr "Скорость получения" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Беспроводной 802.11%s контроллер RaLink" - msgid "Radius-Accounting-Port" msgstr "Порт Radius-Accounting" @@ -2689,6 +2776,11 @@ msgstr "Секрет Radius-Authentication" msgid "Radius-Authentication-Server" msgstr "Сервер Radius-Authentication" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" +"Строка в шестнадцатеричном коде. Оставьте пустой, если ваш провайдер не " +"требует этого" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2700,6 +2792,9 @@ msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " "access to this device if you are connected via this interface" msgstr "" +"Действительно удалить этот интерфейс? Удаление не может быть отменено! Вы " +"можете потерять доступ к этому устройству, если вы подключены через данный " +"интерфейс." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2712,18 +2807,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Действительно сбросить все изменения?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Действительно отключить интерфейс \"%s\"? Вы можете потерять доступ к этому " -"устройству, если вы подключены через этот интерфейс." - msgid "Really switch protocol?" msgstr "Вы действительно хотите изменить протокол?" @@ -2770,9 +2853,6 @@ msgstr "Рекомендуемый. IP адреса интерфейса WireGua msgid "Reconnect this interface" msgstr "Переподключить этот интерфейс" -msgid "Reconnecting interface" -msgstr "Интерфейс переподключается" - msgid "References" msgstr "Ссылки" @@ -2846,7 +2926,7 @@ msgid "" "come from unsigned domains" msgstr "" "Требуется поддержка внешней сетью DNSSEC; убедитесь, что ответы " -"неподписанного домена - действительно поступают от неподписанных доменов." +"неподписанного домена — действительно поступают от неподписанных доменов." msgid "Reset" msgstr "Сбросить" @@ -2869,6 +2949,12 @@ msgstr "Перезапустить" msgid "Restart Firewall" msgstr "Перезапустить межсетевой экран" +msgid "Restart radio interface" +msgstr "Перезапустить радио-интерфейс" + +msgid "Restore" +msgstr "Восстановление" + msgid "Restore backup" msgstr "Восстановить резервную копию" @@ -2879,13 +2965,13 @@ msgid "Revert" msgstr "Вернуть" msgid "Revert changes" -msgstr "" +msgstr "Вернуть изменения" msgid "Revert request failed with status %h" -msgstr "" +msgstr "Ошибка %h отмены конфигурации" msgid "Reverting configuration…" -msgstr "" +msgstr "Отмена конфигурации..." msgid "Root" msgstr "Корень" @@ -2903,7 +2989,7 @@ msgid "Route type" msgstr "Тип маршрута" msgid "Router Advertisement-Service" -msgstr "Доступные
      режимы работы" +msgstr "Доступные режимы работы" msgid "Router Password" msgstr "Пароль маршрутизатора" @@ -2957,6 +3043,9 @@ msgstr "Сохранить и применить" msgid "Scan" msgstr "Поиск" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Запланированные задания" @@ -3000,6 +3089,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Настройка синхронизации времени" +msgid "Setting PLMN failed" +msgstr "Ошибка установки PLMN" + +msgid "Setting operation mode failed" +msgstr "Ошибка установки режима работы" + msgid "Setup DHCP Server" msgstr "Настроить сервер DHCP" @@ -3009,15 +3104,15 @@ msgstr "Секунды с большим числом ошибок (SES)." msgid "Short GI" msgstr "Short GI" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" -msgstr "Показать текущий список
      файлов резервной копии" +msgstr "Показать текущий список файлов резервной копии" msgid "Shutdown this interface" msgstr "Выключить этот интерфейс" -msgid "Shutdown this network" -msgstr "Выключить эту сеть" - msgid "Signal" msgstr "Сигнал" @@ -3034,7 +3129,7 @@ msgid "Size (.ipk)" msgstr "Размер (.ipk)" msgid "Size of DNS query cache" -msgstr "" +msgstr "Размер кэша DNS запроса" msgid "Skip" msgstr "Пропустить" @@ -3121,6 +3216,9 @@ msgid "Start priority" msgstr "Приоритет" msgid "Starting configuration apply…" +msgstr "Применение конфигурации..." + +msgid "Starting wireless scan..." msgstr "" msgid "Startup" @@ -3147,7 +3245,7 @@ msgid "" "configurations where only hosts with a corresponding lease are served." msgstr "" "Постоянная аренда используется для присвоения фиксированных IP-адресов и " -"имён DHCP-клиентам.
      Постоянная аренда также необходима для статических " +"имён DHCP-клиентам. Постоянная аренда также необходима для статических " "интерфейсов, в которых обслуживаются только клиенты с присвоенными адресами." msgid "Status" @@ -3186,7 +3284,7 @@ msgstr "Коммутатор %q (%s)" msgid "" "Switch %q has an unknown topology - the VLAN settings might not be accurate." msgstr "" -"Коммутатор %q имеет неизвестную топологию-настройки VLAN не могут быть " +"Коммутатор %q имеет неизвестную топологию — настройки VLAN не могут быть " "точными." msgid "Switch Port Mask" @@ -3253,9 +3351,8 @@ msgstr "" "Вкладка меню 'Настройка устройства' содержит физические настройки " "радиооборудования, такие как канал, мощность передачи или выбор антенны, " "которые совместно используются всеми настроенными беспроводными сетями (если " -"радиооборудование поддерживает несколько SSID).
      Параметры сети, такие " -"как шифрование или режим работы, смотрите на вкладке 'Настройка сети'." +"радиооборудование поддерживает несколько SSID). Параметры сети, такие как " +"шифрование или режим работы, смотрите на вкладке 'Настройка сети'." msgid "" "The libiwinfo-lua package is not installed. You must install this " @@ -3287,6 +3384,9 @@ msgstr "" "Допустимые символы: A-Z, a-z, 0-9 и " "_" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "Архив резервной копии не является правильным gzip файлом." + msgid "The configuration file could not be loaded due to the following error:" msgstr "Не удалось загрузить config файл из-за следующей ошибки:" @@ -3299,6 +3399,12 @@ msgid "" "or revert all pending changes to keep the currently working configuration " "state." msgstr "" +"Устройство недоступно в течение %d секунд после применения изменений. Это " +"привело к откату конфигурации из соображений безопасности. Если вы считаете, " +"что конфигурация верна, выполните настройку без проверки. Кроме того, вы " +"можете отклонить это предупреждение и отредактировать изменения перед " +"попыткой применить конфигурацию снова или отктить все изменения чтобы " +"сохранить рабочее состояние конфигурации." msgid "" "The device file of the memory or partition (e.g." @@ -3362,11 +3468,11 @@ msgid "" msgstr "" "Сетевые порты этого устройства могут быть объединены в несколько VLANов, в которых компьютеры могут " -"связываться напрямую между собой.
      VLANы часто используются для разделения нескольких сетевых " -"сегментов.
      Обычно по умолчанию используется один порт для подключения к " +"связываться напрямую между собой. VLANы часто используются для разделения нескольких сетевых " +"сегментов. Обычно по умолчанию используется один порт для подключения к " "внешней сети, например к Интернету и другие порты предназначенные для " -"внутренней - локальной сети." +"внутренней — локальной сети." msgid "The selected protocol needs a device assigned" msgstr "Для выбранного протокола необходимо задать устройство" @@ -3401,7 +3507,7 @@ msgid "There are no active leases." msgstr "Нет активных арендованных адресов." msgid "There are no changes to apply." -msgstr "" +msgstr "Нет изменений для применения." msgid "There are no pending changes to revert!" msgstr "Нет изменений, которые можно отменить!" @@ -3441,8 +3547,8 @@ msgid "" "configurations are automatically preserved." msgstr "" "Настройка данного config файла, позволит пользователю создать резервную " -"копию своих настроек.
      Копируются config файлы из папки /etc/config и " -"некоторые другие.
      При перепрошивке устройства sysupgrade-совместимым " +"копию своих настроек. Копируются config файлы из папки /etc/config и " +"некоторые другие. При перепрошивке устройства sysupgrade-совместимым " "образом, вы сможете воспользоваться резервной копией своих настроек." msgid "" @@ -3483,8 +3589,8 @@ msgstr "" msgid "This is the system crontab in which scheduled tasks can be defined." msgstr "" -"На странице содержимое /etc/crontabs/root - файла (задания crontab), здесь " -"вы можете запланировать ваши задания. " +"Содержимое файла /etc/crontabs/root (задания crontab). Здесь вы можете " +"запланировать ваши задания." msgid "" "This is usually the address of the nearest PoP operated by the tunnel broker" @@ -3513,10 +3619,13 @@ msgstr "Часовой пояс" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Чтобы восстановить config файлы, ваши настройки прошивки устройства, вы " -"можете загрузить ранее созданный вами архив здесь." +"можете загрузить ранее созданный вами архив здесь. Для сброса настроек " +"прошивки к исходному состоянию нажмите 'Выполнить сброс' (возможно только " +"для squashfs-образов)." msgid "Tone" msgstr "Тон" @@ -3584,9 +3693,27 @@ msgstr "USB порты" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "Невозможно определить имя устройства" + +msgid "Unable to determine external IP address" +msgstr "Невозможно определить внешний IP-адрес" + +msgid "Unable to determine upstream interface" +msgstr "Невозможно определить основной интерфейс" + msgid "Unable to dispatch" msgstr "Невозможно обработать запрос для" +msgid "Unable to obtain client ID" +msgstr "Невозможно получить идентификатор клиента" + +msgid "Unable to resolve AFTR host name" +msgstr "Не удалось разрешить AFTR имя хоста" + +msgid "Unable to resolve peer host name" +msgstr "Не удалось разрешить имя хоста пира" + msgid "Unavailable Seconds (UAS)" msgstr "Секунды неготовности (UAS)" @@ -3596,6 +3723,9 @@ msgstr "Неизвестно" msgid "Unknown Error, password not changed!" msgstr "Неизвестная ошибка, пароль не был изменен!" +msgid "Unknown error (%s)" +msgstr "Неизвестная ошибка (%s)" + msgid "Unmanaged" msgstr "Неуправляемый" @@ -3605,11 +3735,17 @@ msgstr "Отмонтировать" msgid "Unsaved Changes" msgstr "Непринятые изменения" +msgid "Unsupported MAP type" +msgstr "Неподдерживаемый тип MAP" + +msgid "Unsupported modem" +msgstr "Неподдерживаемый модем" + msgid "Unsupported protocol type." msgstr "Неподдерживаемый тип протокола." msgid "Up" -msgstr "" +msgstr "Вверх" msgid "Update lists" msgstr "Обновить списки" @@ -3621,7 +3757,7 @@ msgid "" msgstr "" "Загрузите sysupgrade-совместимый образ, чтобы заменить текущую прошивку " "устройства. Поставьте галочку 'Сохранить настройки', чтобы сохранить текущие " -"config файлы - ваши настройки устройства (требуется совместимый образ " +"config файлы — ваши настройки устройства (требуется совместимый образ " "прошивки)." msgid "Upload archive..." @@ -3634,7 +3770,7 @@ msgid "Uptime" msgstr "Время работы" msgid "Use /etc/ethers" -msgstr "Использовать
      /etc/ethers" +msgstr "Использовать /etc/ethers" msgid "Use DHCP gateway" msgstr "Использовать шлюз DHCP" @@ -3661,7 +3797,7 @@ msgid "Use broadcast flag" msgstr "Использовать широковещательный флаг" msgid "Use builtin IPv6-management" -msgstr "Использовать встроенный
      IPv6-менеджмент" +msgstr "Использовать встроенный IPv6-менеджмент" msgid "Use custom DNS servers" msgstr "Использовать собственные DNS сервера" @@ -3670,7 +3806,7 @@ msgid "Use default gateway" msgstr "Использовать шлюз по умолчанию" msgid "Use gateway metric" -msgstr "Использовать
      метрику шлюза" +msgstr "Использовать метрику шлюза" msgid "Use routing table" msgstr "Использовать таблицу маршрутизации" @@ -3683,10 +3819,10 @@ msgid "" "standard host-specific lease time, e.g. 12h, 3d or infinite." msgstr "" "Нажмите кнопку 'Добавить', чтобы добавить новую запись аренды. " -"'MAC-Адрес' идентифицирует хост, 'IPv4-Адрес' указывает " +"'MAC-адрес' идентифицирует хост, 'IPv4-адрес' указывает " "фиксированный адрес, а 'Имя хоста' присваивается в качестве " -"символьного имени для запрашивающего хоста.
      Необязательно 'Время " -"аренды адреса' может быть использовано для того, чтобы установить " +"символьного имени для запрашивающего хоста. Необязательно 'Время аренды " +"адреса' может быть использовано для того, чтобы установить " "индивидуальное время аренды, например 12h, 3d или бесконечное." msgid "Used" @@ -3754,6 +3890,9 @@ msgstr "Проверить" msgid "Version" msgstr "Версия" +msgid "Virtual dynamic interface" +msgstr "Виртуальный динамический винтерфейс" + msgid "WDS" msgstr "WDS" @@ -3786,7 +3925,7 @@ msgid "Waiting for command to complete..." msgstr "Ожидание завершения выполнения команды..." msgid "Waiting for configuration to get applied… %ds" -msgstr "" +msgstr "Ожидание применения конфигурации... %d сек." msgid "Waiting for device..." msgstr "Ожидание подключения устройства..." @@ -3796,7 +3935,7 @@ msgstr "Внимание" msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Внимание: Есть не сохраненные изменения, которые будут потеряны при " +"Предупреждение: Есть не сохраненные изменения, которые будут потеряны при " "перезагрузке!" msgid "" @@ -3825,8 +3964,11 @@ msgstr "Список беспроводных сетей" msgid "Wireless Security" msgstr "Безопасность беспроводной сети" -msgid "Wireless is disabled or not associated" -msgstr "Беспроводная сеть отключена или не связана " +msgid "Wireless is disabled" +msgstr "Беспроводная сеть отключена" + +msgid "Wireless is not associated" +msgstr "Беспроводная сеть не связана" msgid "Wireless is restarting..." msgstr "Беспроводная сеть перезапускается..." @@ -3835,13 +3977,7 @@ msgid "Wireless network is disabled" msgstr "Беспроводная сеть отключена" msgid "Wireless network is enabled" -msgstr "Беспроводная
      сеть включена" - -msgid "Wireless restarted" -msgstr "Беспроводная сеть перезапущена" - -msgid "Wireless shut down" -msgstr "Выключение беспроводной сети" +msgstr "Беспроводная сеть включена" msgid "Write received DNS requests to syslog" msgstr "Записывать полученные DNS-запросы в системный журнал." @@ -3855,9 +3991,9 @@ msgid "" "scripts like \"network\", your device might become inaccessible!" msgstr "" "Здесь вы можете включить или выключить установленные скрипты инициализации. " -"Изменения вступят в силу после перезагрузки устройства.
      Внимание: если вы выключите один из основных скриптов инициализации " -"(например 'network'), ваше устройство может оказаться недоступным!" +"Изменения вступят в силу после перезагрузки устройства. Внимание: " +"если вы выключите один из основных скриптов инициализации (например " +"'network'), ваше устройство может оказаться недоступным!" msgid "" "You must enable JavaScript in your browser or LuCI will not work properly." @@ -3887,7 +4023,7 @@ msgid "bridged" msgstr "соед. мостом" msgid "create" -msgstr "" +msgstr "создать" msgid "create:" msgstr "создать:" @@ -3896,10 +4032,10 @@ msgid "creates a bridge over specified interface(s)" msgstr "Создаёт мост для выбранных сетевых интерфейсов." msgid "dB" -msgstr "dB" +msgstr "дБ" msgid "dBm" -msgstr "dBm" +msgstr "дБм" msgid "disable" msgstr "отключить" @@ -3939,13 +4075,13 @@ msgid "input" msgstr "ввод" msgid "kB" -msgstr "kB" +msgstr "кБ" msgid "kB/s" -msgstr "kB/s" +msgstr "кБ/с" msgid "kbit/s" -msgstr "kbit/s" +msgstr "кбит/с" msgid "local DNS file" msgstr "Локальный DNS-файл." @@ -3953,6 +4089,9 @@ msgstr "Локальный %s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Активировать эту сеть" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Беспроводной 802.11b контроллер Hermes" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Интерфейс отключается..." + +#~ msgid "Interface reconnected" +#~ msgstr "Интерфейс переподключен" + +#~ msgid "Interface shut down" +#~ msgstr "Интерфейс отключен" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Беспроводной 802.11b контроллер Prism2/2.5/3" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "Беспроводной 802.11%s контроллер RaLink" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "Действительно отключить интерфейс \"%s\"? Вы можете потерять доступ к " +#~ "этому устройству, если вы подключены через этот интерфейс." + +#~ msgid "Reconnecting interface" +#~ msgstr "Интерфейс переподключается" + +#~ msgid "Shutdown this network" +#~ msgstr "Выключить эту сеть" + +#~ msgid "Wireless restarted" +#~ msgstr "Беспроводная сеть перезапущена" + +#~ msgid "Wireless shut down" +#~ msgstr "Выключение беспроводной сети" + #~ msgid "DHCP Leases" #~ msgstr "Аренды DHCP" diff --git a/luci-base/po/sk/base.po b/luci-base/po/sk/base.po index dab1a7def..750fe8c80 100644 --- a/luci-base/po/sk/base.po +++ b/luci-base/po/sk/base.po @@ -145,9 +145,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -204,9 +201,6 @@ msgstr "" msgid "Actions" msgstr "" -msgid "Activate this network" -msgstr "" - msgid "Active IPv4-Routes" msgstr "" @@ -258,6 +252,18 @@ msgstr "" msgid "Alert" msgstr "" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -269,6 +275,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "" @@ -300,6 +309,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -476,10 +490,10 @@ msgstr "" msgid "Back to scan results" msgstr "" -msgid "Backup / Flash Firmware" +msgid "Backup" msgstr "" -msgid "Backup / Restore" +msgid "Backup / Flash Firmware" msgstr "" msgid "Backup file list" @@ -491,6 +505,9 @@ msgstr "" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -544,6 +561,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "" @@ -605,8 +625,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -642,6 +661,9 @@ msgstr "" msgid "Configuration" msgstr "" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "" @@ -663,6 +685,9 @@ msgstr "" msgid "Connection Limit" msgstr "" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "" @@ -774,6 +799,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -810,6 +838,9 @@ msgstr "" msgid "Delete this network" msgstr "" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "" @@ -828,10 +859,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -857,15 +888,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1147,6 +1187,9 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1200,6 +1243,9 @@ msgstr "" msgid "Force" msgstr "" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1262,6 +1308,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1332,9 +1381,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "" @@ -1350,6 +1396,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "" @@ -1371,6 +1420,12 @@ msgstr "" msgid "IP address" msgstr "" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1534,6 +1589,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "" @@ -1570,21 +1628,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "" @@ -1770,6 +1819,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1834,6 +1886,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1849,6 +1904,9 @@ msgstr "" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1928,6 +1986,9 @@ msgstr "" msgid "Modem device" msgstr "" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2023,6 +2084,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2044,6 +2108,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2062,6 +2129,9 @@ msgstr "" msgid "No rules in this chain" msgstr "" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2190,6 +2260,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2268,6 +2341,9 @@ msgstr "" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2355,6 +2431,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2423,9 +2502,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2474,6 +2550,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2492,9 +2573,6 @@ msgstr "" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2513,6 +2591,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2531,16 +2612,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2586,9 +2657,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "" @@ -2677,6 +2745,12 @@ msgstr "" msgid "Restart Firewall" msgstr "" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "" @@ -2763,6 +2837,9 @@ msgstr "" msgid "Scan" msgstr "" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "" @@ -2803,6 +2880,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2812,15 +2895,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "" @@ -2916,6 +2999,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3062,6 +3148,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3242,7 +3331,8 @@ msgstr "" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3311,9 +3401,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3323,6 +3431,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3332,6 +3443,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3468,6 +3585,9 @@ msgstr "" msgid "Version" msgstr "" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "" @@ -3535,7 +3655,10 @@ msgstr "" msgid "Wireless Security" msgstr "" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3547,12 +3670,6 @@ msgstr "" msgid "Wireless network is enabled" msgstr "" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3652,6 +3769,9 @@ msgstr "" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "" diff --git a/luci-base/po/sv/base.po b/luci-base/po/sv/base.po index ecfd0bae8..b88715deb 100644 --- a/luci-base/po/sv/base.po +++ b/luci-base/po/sv/base.po @@ -151,9 +151,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -212,9 +209,6 @@ msgstr "Accesspunkt" msgid "Actions" msgstr "Åtgärder" -msgid "Activate this network" -msgstr "Aktivera det här nätverket" - msgid "Active IPv4-Routes" msgstr "Aktiva IPv4-rutter" @@ -266,6 +260,18 @@ msgstr "" msgid "Alert" msgstr "Varning" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -278,6 +284,9 @@ msgstr "Allokera IP sekventiellt" msgid "Allow SSH password authentication" msgstr "Tillåt SSH lösenordsautentisering" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Tillåt alla utom listade" @@ -311,6 +320,11 @@ msgstr "Tillåtna IP-adresser" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -487,12 +501,12 @@ msgstr "Backa till överblick" msgid "Back to scan results" msgstr "Backa till skanningsresultat" +msgid "Backup" +msgstr "Säkerhetskopiera" + msgid "Backup / Flash Firmware" msgstr "Säkerhetskopiera / Flasha inre mjukvara" -msgid "Backup / Restore" -msgstr "Säkerhetskopiera / Återställ" - msgid "Backup file list" msgstr "Säkerhetskopiera fillista" @@ -502,6 +516,9 @@ msgstr "Fel adress angiven!" msgid "Band" msgstr "Band" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -556,6 +573,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU-användning (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Avbryt" @@ -619,8 +639,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -656,6 +675,9 @@ msgstr "" msgid "Configuration" msgstr "Konfiguration" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "Konfigurationsfiler kommer att behållas." @@ -677,6 +699,9 @@ msgstr "Ansluten" msgid "Connection Limit" msgstr "Anslutningsgräns" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "Anslutningar" @@ -788,6 +813,9 @@ msgstr "DSL-status" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -824,6 +852,9 @@ msgstr "Radera" msgid "Delete this network" msgstr "Ta bort det här nätverket" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Beskrivning" @@ -842,10 +873,10 @@ msgstr "Enhetskonfiguration" msgid "Device is rebooting..." msgstr "Enheten startar om..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Enheten kan inte nås" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -873,15 +904,24 @@ msgstr "" msgid "Disable Encryption" msgstr "Inaktivera kryptering" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "Inaktiverad" msgid "Disabled (default)" msgstr "Inaktiverad (standard)" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1167,6 +1207,9 @@ msgstr "Filtrera privata" msgid "Filter useless" msgstr "Filtrera icke-användbara" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1220,6 +1263,9 @@ msgstr "Skriver..." msgid "Force" msgstr "Tvinga" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "Tvinga CCMP (AES)" @@ -1282,6 +1328,9 @@ msgstr "Endast GPRS" msgid "Gateway" msgstr "Gateway" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "Gateway-portar" @@ -1352,9 +1401,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "Göm ESSID" @@ -1370,6 +1416,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "Host-IP eller Nätverk" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Värdnamn" @@ -1391,6 +1440,12 @@ msgstr "IP-adresser" msgid "IP address" msgstr "IP-adress" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1554,6 +1609,9 @@ msgstr "Ankommande" msgid "Info" msgstr "Info" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Initskript" @@ -1590,21 +1648,12 @@ msgstr "Överblick av gränssnitt" msgid "Interface is reconnecting..." msgstr "Gränssnittet återansluter..." -msgid "Interface is shutting down..." -msgstr "Gränssnittet stänger ner..." - msgid "Interface name" msgstr "Gränssnittets namn" msgid "Interface not present or not connected yet." msgstr "Gränssnittet är inte närvarande eller är inte anslutet än." -msgid "Interface reconnected" -msgstr "Gränssnittet återanslöt" - -msgid "Interface shut down" -msgstr "Gränssnittet stängdes ner" - msgid "Interfaces" msgstr "Gränssnitten" @@ -1791,6 +1840,9 @@ msgstr "Snitt-belastning" msgid "Loading" msgstr "Laddar" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1855,6 +1907,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-adress" @@ -1870,6 +1925,9 @@ msgstr "MAC-lista" msgid "MAP / LW4over6" msgstr "MAP / LW4över6" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1949,6 +2007,9 @@ msgstr "Modell" msgid "Modem device" msgstr "Modem-enhet" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2044,6 +2105,9 @@ msgstr "Nätverksverktyg" msgid "Network boot image" msgstr "Uppstartsbild för nätverket" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "Nätverk utan gränssnitt" @@ -2065,6 +2129,9 @@ msgstr "Inga filer hittades" msgid "No information available" msgstr "Ingen information tillgänglig" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "Ingen negativ cache" @@ -2083,6 +2150,9 @@ msgstr "Inget lösenord inställt!" msgid "No rules in this chain" msgstr "Inga regler i den här kedjan" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2211,6 +2281,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2289,6 +2362,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN-kod" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2376,6 +2452,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2444,9 +2523,6 @@ msgstr "Förhindra lyssning på dessa gränssnitt." msgid "Prevents client-to-client communication" msgstr "Förhindrar kommunikation klient-till-klient" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "Privat nyckel" @@ -2495,6 +2571,11 @@ msgstr "QMI-telefoni" msgid "Quality" msgstr "Kvalité" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2513,9 +2594,6 @@ msgstr "RT" msgid "RX Rate" msgstr "RX-hastighet" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2534,6 +2612,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2554,16 +2635,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Verkligen återställa alla ändringar?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "Verkligen byta protokoll?" @@ -2609,9 +2680,6 @@ msgstr "Rekommenderad. WireGuard-gränssnittets IP-adress" msgid "Reconnect this interface" msgstr "Återanslut det här gränssnittet" -msgid "Reconnecting interface" -msgstr "Återansluter gränssnittet" - msgid "References" msgstr "Referens" @@ -2700,6 +2768,12 @@ msgstr "Starta om" msgid "Restart Firewall" msgstr "Starta om brandvägg" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Återställ" + msgid "Restore backup" msgstr "Återställ säkerhetskopian" @@ -2786,6 +2860,9 @@ msgstr "Spara och Verkställ" msgid "Scan" msgstr "Skanna" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" @@ -2826,6 +2903,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Ställ in Tidssynkronisering" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "Ställ in DHCP-server" @@ -2835,15 +2918,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "Stäng ner det här gränssnittet" -msgid "Shutdown this network" -msgstr "Stäng ner det här nätverket" - msgid "Signal" msgstr "Signal" @@ -2939,6 +3022,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3085,6 +3171,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3267,7 +3356,8 @@ msgstr "Tidszon" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "För att återställa konfigurationsfiler så kan du ladda upp ett tidigare " "genererat säkerhetskopierings arkiv här." @@ -3338,9 +3428,27 @@ msgstr "USB-portar" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "Det går inte att skicka" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "Otillgängliga Sekunder (UAS)" @@ -3350,6 +3458,9 @@ msgstr "Okänd" msgid "Unknown Error, password not changed!" msgstr "Okänt fel, lösenordet ändrades inte!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3359,6 +3470,12 @@ msgstr "Avmontera" msgid "Unsaved Changes" msgstr "Osparade ändringar" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "Protokolltypen stöds inte." @@ -3495,6 +3612,9 @@ msgstr "Verkställ" msgid "Version" msgstr "Version" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3563,8 +3683,11 @@ msgstr "Trådlös överblick" msgid "Wireless Security" msgstr "Trådlös säkerhet" -msgid "Wireless is disabled or not associated" -msgstr "Trådlöst är avstängt eller inte associerat" +msgid "Wireless is disabled" +msgstr "Trådlöst är avstängt" + +msgid "Wireless is not associated" +msgstr "Trådlöst är inte associerat" msgid "Wireless is restarting..." msgstr "Trådlöst startar om..." @@ -3575,12 +3698,6 @@ msgstr "Trådlöst nätverk är avstängt" msgid "Wireless network is enabled" msgstr "Trådlöst nätverk är aktiverat" -msgid "Wireless restarted" -msgstr "Trådlöst startade om" - -msgid "Wireless shut down" -msgstr "Trådlöst stängde ner" - msgid "Write received DNS requests to syslog" msgstr "Skriv mottagna DNS-förfrågningar till syslogg" @@ -3685,6 +3802,9 @@ msgstr "lokal DNS-fil" msgid "minutes" msgstr "minuter" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "nej" @@ -3760,6 +3880,33 @@ msgstr "ja" msgid "« Back" msgstr "« Bakåt" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "Aktivera det här nätverket" + +#~ msgid "Interface is shutting down..." +#~ msgstr "Gränssnittet stänger ner..." + +#~ msgid "Interface reconnected" +#~ msgstr "Gränssnittet återanslöt" + +#~ msgid "Interface shut down" +#~ msgstr "Gränssnittet stängdes ner" + +#~ msgid "Reconnecting interface" +#~ msgstr "Återansluter gränssnittet" + +#~ msgid "Shutdown this network" +#~ msgstr "Stäng ner det här nätverket" + +#~ msgid "Wireless restarted" +#~ msgstr "Trådlöst startade om" + +#~ msgid "Wireless shut down" +#~ msgstr "Trådlöst stängde ner" + #~ msgid "DHCP Leases" #~ msgstr "DHCP-kontrakt" diff --git a/luci-base/po/templates/base.pot b/luci-base/po/templates/base.pot index 9019e101c..80feb44ef 100644 --- a/luci-base/po/templates/base.pot +++ b/luci-base/po/templates/base.pot @@ -138,9 +138,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -197,9 +194,6 @@ msgstr "" msgid "Actions" msgstr "" -msgid "Activate this network" -msgstr "" - msgid "Active IPv4-Routes" msgstr "" @@ -251,6 +245,18 @@ msgstr "" msgid "Alert" msgstr "" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -262,6 +268,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "" @@ -293,6 +302,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -469,10 +483,10 @@ msgstr "" msgid "Back to scan results" msgstr "" -msgid "Backup / Flash Firmware" +msgid "Backup" msgstr "" -msgid "Backup / Restore" +msgid "Backup / Flash Firmware" msgstr "" msgid "Backup file list" @@ -484,6 +498,9 @@ msgstr "" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -537,6 +554,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "" @@ -598,8 +618,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -635,6 +654,9 @@ msgstr "" msgid "Configuration" msgstr "" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "" @@ -656,6 +678,9 @@ msgstr "" msgid "Connection Limit" msgstr "" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "" @@ -767,6 +792,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -803,6 +831,9 @@ msgstr "" msgid "Delete this network" msgstr "" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "" @@ -821,10 +852,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -850,15 +881,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1140,6 +1180,9 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1193,6 +1236,9 @@ msgstr "" msgid "Force" msgstr "" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1255,6 +1301,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1325,9 +1374,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "" @@ -1343,6 +1389,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "" @@ -1364,6 +1413,12 @@ msgstr "" msgid "IP address" msgstr "" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1527,6 +1582,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "" @@ -1563,21 +1621,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "" @@ -1763,6 +1812,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1827,6 +1879,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1842,6 +1897,9 @@ msgstr "" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1921,6 +1979,9 @@ msgstr "" msgid "Modem device" msgstr "" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2016,6 +2077,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2037,6 +2101,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2055,6 +2122,9 @@ msgstr "" msgid "No rules in this chain" msgstr "" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2183,6 +2253,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2261,6 +2334,9 @@ msgstr "" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2348,6 +2424,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2416,9 +2495,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2467,6 +2543,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2485,9 +2566,6 @@ msgstr "" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2506,6 +2584,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2524,16 +2605,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2579,9 +2650,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "" @@ -2670,6 +2738,12 @@ msgstr "" msgid "Restart Firewall" msgstr "" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "" @@ -2756,6 +2830,9 @@ msgstr "" msgid "Scan" msgstr "" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "" @@ -2796,6 +2873,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2805,15 +2888,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "" @@ -2909,6 +2992,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3055,6 +3141,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3235,7 +3324,8 @@ msgstr "" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3304,9 +3394,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3316,6 +3424,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3325,6 +3436,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3461,6 +3578,9 @@ msgstr "" msgid "Version" msgstr "" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "" @@ -3528,7 +3648,10 @@ msgstr "" msgid "Wireless Security" msgstr "" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3540,12 +3663,6 @@ msgstr "" msgid "Wireless network is enabled" msgstr "" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3645,6 +3762,9 @@ msgstr "" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "" diff --git a/luci-base/po/tr/base.po b/luci-base/po/tr/base.po index 82543b4a1..6a41c51b5 100644 --- a/luci-base/po/tr/base.po +++ b/luci-base/po/tr/base.po @@ -154,9 +154,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Maks. eşzamanlı sorgu" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -213,9 +210,6 @@ msgstr "Erişim Noktası" msgid "Actions" msgstr "Eylemler" -msgid "Activate this network" -msgstr "Bu ağı etkinleştir" - msgid "Active IPv4-Routes" msgstr "" "Aktif IPv4-Yönlendiriciler" @@ -269,6 +263,18 @@ msgstr "" msgid "Alert" msgstr "Uyarı" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -282,6 +288,9 @@ msgid "Allow SSH password authentication" msgstr "" "SSH parola kimlik doğrulamasına izin ver" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Listelenenlerin haricindekilere izin ver" @@ -313,6 +322,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -489,12 +503,12 @@ msgstr "Genel Bakışa dön" msgid "Back to scan results" msgstr "Tarama sonuçlarına dön" +msgid "Backup" +msgstr "Yedekleme" + msgid "Backup / Flash Firmware" msgstr "" -msgid "Backup / Restore" -msgstr "Yedekleme / Geri Yükleme" - msgid "Backup file list" msgstr "" @@ -504,6 +518,9 @@ msgstr "" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -557,6 +574,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU kullanımı (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Vazgeç" @@ -618,8 +638,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -655,6 +674,9 @@ msgstr "" msgid "Configuration" msgstr "" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "" @@ -676,6 +698,9 @@ msgstr "" msgid "Connection Limit" msgstr "" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "" @@ -787,6 +812,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -823,6 +851,9 @@ msgstr "" msgid "Delete this network" msgstr "" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "" @@ -841,10 +872,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -870,15 +901,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1160,6 +1200,9 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1213,6 +1256,9 @@ msgstr "" msgid "Force" msgstr "" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1275,6 +1321,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1345,9 +1394,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "" @@ -1363,6 +1409,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "" @@ -1384,6 +1433,12 @@ msgstr "" msgid "IP address" msgstr "" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1547,6 +1602,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "" @@ -1583,21 +1641,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "" @@ -1783,6 +1832,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1847,6 +1899,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1862,6 +1917,9 @@ msgstr "" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1941,6 +1999,9 @@ msgstr "" msgid "Modem device" msgstr "" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2036,6 +2097,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2057,6 +2121,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2075,6 +2142,9 @@ msgstr "" msgid "No rules in this chain" msgstr "" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2203,6 +2273,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2281,6 +2354,9 @@ msgstr "" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2368,6 +2444,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2436,9 +2515,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2487,6 +2563,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2505,9 +2586,6 @@ msgstr "" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2526,6 +2604,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2544,16 +2625,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2599,9 +2670,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "" @@ -2690,6 +2758,12 @@ msgstr "Tekrar başlat" msgid "Restart Firewall" msgstr "" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "Geri Yükleme" + msgid "Restore backup" msgstr "Yedeklemeyi geri yükle" @@ -2721,7 +2795,7 @@ msgid "Route Allowed IPs" msgstr "" msgid "Route type" -msgstr "Yönlendirme Tipi" +msgstr "" msgid "Router Advertisement-Service" msgstr "" @@ -2744,7 +2818,7 @@ msgid "Run filesystem check" msgstr "Dosya sistemi kontrolünü çalıştır" msgid "SHA256" -msgstr "SHA256" +msgstr "" msgid "SNR" msgstr "SNR" @@ -2776,6 +2850,9 @@ msgstr "Kaydet & Uygula" msgid "Scan" msgstr "Tara" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Zamanlanmış Görevler" @@ -2816,6 +2893,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2825,15 +2908,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "Sinyal" @@ -2886,7 +2969,7 @@ msgid "" msgstr "" msgid "Source" -msgstr "Kaynak" +msgstr "" msgid "Specifies the directory the device is attached to" msgstr "" @@ -2929,6 +3012,9 @@ msgstr "" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3075,6 +3161,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3255,7 +3344,8 @@ msgstr "" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3324,9 +3414,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3336,6 +3444,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3345,6 +3456,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3481,6 +3598,9 @@ msgstr "Kontrol" msgid "Version" msgstr "Versiyon" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "" @@ -3548,7 +3668,10 @@ msgstr "" msgid "Wireless Security" msgstr "" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3560,12 +3683,6 @@ msgstr "" msgid "Wireless network is enabled" msgstr "" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3667,6 +3784,9 @@ msgstr "yerel DNS dosyası" msgid "minutes" msgstr "dakika" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "hayır" @@ -3742,6 +3862,9 @@ msgstr "evet" msgid "« Back" msgstr "« Geri" +#~ msgid "Activate this network" +#~ msgstr "Bu ağı etkinleştir" + #~ msgid "Sort" #~ msgstr "Sıralama" diff --git a/luci-base/po/uk/base.po b/luci-base/po/uk/base.po index 2de8a8305..1496b938f 100644 --- a/luci-base/po/uk/base.po +++ b/luci-base/po/uk/base.po @@ -1,15 +1,15 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2018-07-01 23:50+0300\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2018-07-20 11:30+0300\n" "Last-Translator: Yurii \n" "Language-Team: none\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "%.1f dB" msgstr "%.1f дБ" @@ -18,7 +18,7 @@ msgid "%s is untagged in multiple VLANs!" msgstr "%s є непозначеним у декількох VLAN!" msgid "(%d minute window, %d second interval)" -msgstr "(вікно - %d хвилин, інтервал - %d секунд)" +msgstr "(вікно - %d хв, інтервал - %d с)" msgid "(%s available)" msgstr "(доступно %s)" @@ -169,9 +169,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "Макс. одночасних запитів" -msgid "%s - %s" -msgstr "%s – %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -240,14 +237,11 @@ msgstr "Точка доступу" msgid "Actions" msgstr "Дії" -msgid "Activate this network" -msgstr "Активувати цю мережу" - msgid "Active IPv4-Routes" msgstr "IPv4-маршрути" msgid "Active IPv6-Routes" -msgstr "IPv6-маршрути" +msgstr "IPv6-маршрути" msgid "Active Connections" msgstr "Активні підключення" @@ -294,6 +288,18 @@ msgstr "Сумарна потужність передавання" msgid "Alert" msgstr "Тривога" +msgid "Alias Interface" +msgstr "Інтерфейс псевдоніма" + +msgid "Alias interface" +msgstr "Інтерфейс псевдоніма" + +msgid "Alias of \"%s\"" +msgstr "Псевдонім \"%s\"" + +msgid "All Servers" +msgstr "Усі сервери" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -307,6 +313,12 @@ msgstr "" "Дозволити SSH-" "перевірку пароля" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" +"Дозволити режиму AP відключення абонентів на підставі низького рівня ACK" + msgid "Allow all except listed" msgstr "Дозволити всі, крім зазначених" @@ -337,11 +349,19 @@ msgstr "" "наприклад, для RBL-послуг" msgid "Allowed IPs" -msgstr "Дозволено IP-адреси" +msgstr "" msgid "Always announce default router" msgstr "Завжди оголошувати типовим маршрутизатором" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" +"Завжди використовувати канали 40 МГц, навіть якщо вторинний канал " +"перекривається. Використання цієї опції не відповідає стандарту IEEE " +"802.11n-2009!" + msgid "Annex" msgstr "" @@ -389,7 +409,7 @@ msgstr "" msgid "Announce as default router even if no public prefix is available." msgstr "" -"Оголошувати типовим маршрутизатором, навіть якщо немає доступного спільного " +"Оголошувати типовим маршрутизатором, навіть якщо немає доступного публічного " "префікса." msgid "Announced DNS domains" @@ -525,12 +545,12 @@ msgstr "Повернутися до переліку" msgid "Back to scan results" msgstr "Повернутися до результатів сканування" +msgid "Backup" +msgstr "Резервне копіювання" + msgid "Backup / Flash Firmware" msgstr "Резервне копіювання / Прошивка мікропрограми" -msgid "Backup / Restore" -msgstr "Резервне копіювання/відновлення" - msgid "Backup file list" msgstr "Список файлів резервних копій" @@ -538,7 +558,10 @@ msgid "Bad address specified!" msgstr "Вказано неправильну адресу!" msgid "Band" -msgstr "Група" +msgstr "" + +msgid "Beacon Interval" +msgstr "Інтервал маяка" msgid "" "Below is the determined list of files to backup. It consists of changed " @@ -599,6 +622,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "Завантаження ЦП, %" +msgid "Call failed" +msgstr "Не вдалося здійснити виклик" + msgid "Cancel" msgstr "Скасувати" @@ -668,12 +694,10 @@ msgstr "Інкапсуляція UDP Cisco" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Натисніть кнопку \"Створити архів\", щоб завантажити tar-архів поточних " -"файлів конфігурації. Для відновлення мікропрограми до її початкового стану " -"натисніть кнопку \"Відновити\" (можливо тільки з образами SquashFS)." +"файлів конфігурації." msgid "Client" msgstr "Клієнт" @@ -714,6 +738,9 @@ msgstr "" msgid "Configuration" msgstr "Конфігурація" +msgid "Configuration failed" +msgstr "Помилка налаштування" + msgid "Configuration files will be kept." msgstr "Конфігураційні файли буде збережено." @@ -735,6 +762,9 @@ msgstr "Підключено" msgid "Connection Limit" msgstr "Гранична кількість підключень" +msgid "Connection attempt failed" +msgstr "Невдала спроба підключення" + msgid "Connections" msgstr "Підключення" @@ -856,6 +886,11 @@ msgstr "Стан DSL" msgid "DSL line mode" msgstr "Режим лінії DSL" +msgid "DTIM Interval" +msgstr "" +"Інтервал DTIM" + msgid "DUID" msgstr "DUID" @@ -872,7 +907,7 @@ msgid "Default gateway" msgstr "Типовий шлюз" msgid "Default is stateless + stateful" -msgstr "Типовим є БЕЗ та ЗІ збереженням стану" +msgstr "" msgid "Default state" msgstr "Типовий стан" @@ -895,6 +930,9 @@ msgstr "Видалити" msgid "Delete this network" msgstr "Видалити цю мережу" +msgid "Delivery Traffic Indication Message Interval" +msgstr "Інтервал повідомлень індикації доправлення трафіку" + msgid "Description" msgstr "Опис" @@ -913,12 +951,12 @@ msgstr "Конфігурація пристрою" msgid "Device is rebooting..." msgstr "Пристрій перезавантажується..." -msgid "Device unreachable" -msgstr "Пристрій недосяжний" - msgid "Device unreachable!" msgstr "Пристрій недосяжний!" +msgid "Device unreachable! Still waiting for device..." +msgstr "Пристрій недосяжний! Досі чекаємо на пристрій..." + msgid "Diagnostics" msgstr "Діагностика" @@ -944,15 +982,24 @@ msgstr "Вимкнути налаштування DNS" msgid "Disable Encryption" msgstr "Вимкнути шифрування" +msgid "Disable this network" +msgstr "Вимкнути цю мережу" + msgid "Disabled" msgstr "Вимкнено" msgid "Disabled (default)" msgstr "Вимкнено (типово)" +msgid "Disassociate On Low Acknowledgement" +msgstr "Роз'єднувати за низького підтвердження" + msgid "Discard upstream RFC1918 responses" msgstr "Відкидати висхідні RFC1918-відповіді" +msgid "Disconnection attempt failed" +msgstr "Спроба від’єднання не вдалася" + msgid "Dismiss" msgstr "Відхилити" @@ -988,7 +1035,7 @@ msgstr "Не кешувати негативні відповіді, напри msgid "Do not forward requests that cannot be answered by public name servers" msgstr "" -"Не переспрямовувати запити, які не може бути оброблено публічними серверами " +"Не переспрямовувати запити, які не може бути оброблено відкритими серверами " "імен" msgid "Do not forward reverse lookups for local networks" @@ -1260,6 +1307,9 @@ msgstr "Фільтрувати приватні" msgid "Filter useless" msgstr "Фільтрувати непридатні" +msgid "Finalizing failed" +msgstr "Завершення не вдалося" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1315,6 +1365,9 @@ msgstr "Прошиваємо..." msgid "Force" msgstr "Примусово" +msgid "Force 40MHz mode" +msgstr "Примусово застосовувати режим '40MHz'" + msgid "Force CCMP (AES)" msgstr "Примусово CCMP (AES)" @@ -1379,6 +1432,9 @@ msgstr "Тільки GPRS" msgid "Gateway" msgstr "Шлюз" +msgid "Gateway address is invalid" +msgstr "Неприпустима адреса шлюзу" + msgid "Gateway ports" msgstr "Порти шлюзу" @@ -1453,9 +1509,6 @@ msgstr "" "Тут ви можете вставити відкриті SSH-ключі (по одному на рядок) для SSH з " "відкритим ключем автентифікації." -msgid "Hermes 802.11b Wireless Controller" -msgstr "Бездротовий 802.11b контролер Hermes" - msgid "Hide ESSID" msgstr "" "Приховати IP or Network" msgstr "IP вузла або мережа" +msgid "Host-Uniq tag content" +msgstr "Зміст тегу Host-Uniq" + msgid "Hostname" msgstr "Назва (ім’я) вузла" @@ -1483,17 +1539,23 @@ msgid "Hostnames" msgstr "Імена вузлів" msgid "Hybrid" -msgstr "" +msgstr "Гібрид" msgid "IKE DH Group" -msgstr "" +msgstr "Група IKE DH" msgid "IP Addresses" -msgstr "Адреси IP" +msgstr "IP-адреси" msgid "IP address" msgstr "IP-адреса" +msgid "IP address in invalid" +msgstr "Неприпустима IP-адреса" + +msgid "IP address is missing" +msgstr "Відсутня IP-адреса" + msgid "IPv4" msgstr "IPv4" @@ -1525,7 +1587,7 @@ msgid "IPv4 only" msgstr "Тільки IPv4" msgid "IPv4 prefix" -msgstr "" +msgstr "Префікс IPv4" msgid "IPv4 prefix length" msgstr "Довжина префікса IPv4" @@ -1534,7 +1596,7 @@ msgid "IPv4-Address" msgstr "IPv4-адреса" msgid "IPv4-in-IPv4 (RFC2003)" -msgstr "" +msgstr "IPv4 у IPv4 (RFC2003)" msgid "IPv6" msgstr "IPv6" @@ -1672,6 +1734,9 @@ msgstr "Вхідний:" msgid "Info" msgstr "Інформація" +msgid "Initialization failure" +msgstr "Помилка ініціалізації" + msgid "Initscript" msgstr "Скрипт ініціалізації" @@ -1682,7 +1747,7 @@ msgid "Install" msgstr "Інсталювати" msgid "Install iputils-traceroute6 for IPv6 traceroute" -msgstr "" +msgstr "Інсталюйте iputils-traceroute6 для трасування IPv6" msgid "Install package %q" msgstr "Інсталяція пакета %q" @@ -1708,26 +1773,17 @@ msgstr "Огляд інтерфейсів" msgid "Interface is reconnecting..." msgstr "Перепідключення інтерфейсу..." -msgid "Interface is shutting down..." -msgstr "Інтерфейс завершує роботу..." - msgid "Interface name" msgstr "Ім’я інтерфейсу" msgid "Interface not present or not connected yet." msgstr "Інтерфейс відсутній або його ще не підключено." -msgid "Interface reconnected" -msgstr "Інтерфейс перепідключено" - -msgid "Interface shut down" -msgstr "Інтерфейс завершив роботу" - msgid "Interfaces" msgstr "Інтерфейси" msgid "Internal" -msgstr "" +msgstr "Внутрішній" msgid "Internal Server Error" msgstr "Внутрішня помилка сервера" @@ -1737,10 +1793,12 @@ msgstr "Неприпустимо" msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." msgstr "" -"Задано невірний VLAN ID! Доступні тільки ідентифікатори в межах між %d і %d." +"Задано неприпустимий VLAN ID! Доступні тільки ідентифікатори в межах між %d " +"і %d." msgid "Invalid VLAN ID given! Only unique IDs are allowed" -msgstr "Задано невірний VLAN ID! Доступні тільки унікальні ідентифікатори." +msgstr "" +"Задано неприпустимий VLAN ID! Доступні тільки унікальні ідентифікатори." msgid "Invalid username and/or password! Please try again." msgstr "Неприпустиме ім’я користувача та/або пароль! Спробуйте ще раз." @@ -1848,16 +1906,16 @@ msgstr "" "Обмежитися прослуховуванням цих інтерфейсів і повернутися до початку циклу." msgid "Line Attenuation (LATN)" -msgstr "" +msgstr "Затухання лінії" msgid "Line Mode" -msgstr "" +msgstr "Режим лінії" msgid "Line State" -msgstr "" +msgstr "Стан лінії" msgid "Line Uptime" -msgstr "" +msgstr "Час безперервної роботи лінії" msgid "Link On" msgstr "Зв’язок встановлено" @@ -1902,7 +1960,7 @@ msgstr "" "abbr>, які можуть запитувати ключі PMK-R1." msgid "List of SSH key files for auth" -msgstr "" +msgstr "Список файлів SSH-ключів для авторизації" msgid "List of domains to allow RFC1918 responses for" msgstr "Список доменів, для яких дозволено RFC1918-відповіді" @@ -1933,8 +1991,11 @@ msgstr "Середнє навантаження" msgid "Loading" msgstr "Завантаження" +msgid "Local IP address is invalid" +msgstr "Неприпустима локальна ІР-адреса" + msgid "Local IP address to assign" -msgstr "" +msgstr "Локальна IP-адреса для призначення" msgid "Local IPv4 address" msgstr "Локальна адреса IPv4" @@ -1981,7 +2042,7 @@ msgid "Localise queries" msgstr "Локалізувати запити" msgid "Locked to channel %s used by: %s" -msgstr "" +msgstr "Заблоковано до каналу %s, який використовує: %s" msgid "Log output level" msgstr "Рівень виведення інформаціі до журналу" @@ -2004,6 +2065,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "Найнижча орендована адреса." +msgid "MAC" +msgstr "MAC" + msgid "MAC-Address" msgstr "MAC-адреса" @@ -2019,6 +2083,9 @@ msgstr "MAC-список" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "Неприпустиме правило MAP" + msgid "MB/s" msgstr "MБ/с" @@ -2035,12 +2102,14 @@ msgid "" "Make sure to clone the root filesystem using something like the commands " "below:" msgstr "" +"Переконайтеся, що ви клонуєте кореневу файлову систему, використовуючи такі " +"команди:" msgid "Manual" -msgstr "" +msgstr "Вручну" msgid "Max. Attainable Data Rate (ATTNDR)" -msgstr "" +msgstr "Макс. досяжна швидкість передачі даних (ATTNDR)" msgid "Maximum allowed number of active DHCP leases" msgstr "Максимально допустима кількість активних оренд DHCP" @@ -2058,6 +2127,8 @@ msgid "" "Maximum length of the name is 15 characters including the automatic protocol/" "bridge prefix (br-, 6in4-, pppoe- etc.)" msgstr "" +"Максимальна довжина імені становить 15 символів, включаючи префікс " +"автоматичного протоколу/мосту (br-, 6in4-, pppoe та ін.)" msgid "Maximum number of leased addresses." msgstr "Максимальна кількість орендованих адрес." @@ -2098,6 +2169,9 @@ msgstr "Модель" msgid "Modem device" msgstr "Модем" +msgid "Modem information query failed" +msgstr "Помилка запиту інформації про модем" + msgid "Modem init timeout" msgstr "Тайм-аут ініціалізації модему" @@ -2154,22 +2228,22 @@ msgid "NAS ID" msgstr "Ідентифікатор NAS" msgid "NAT-T Mode" -msgstr "" +msgstr "Режим NAT-T" msgid "NAT64 Prefix" -msgstr "" +msgstr "Префікс NAT64" msgid "NCM" -msgstr "" +msgstr "NCM" msgid "NDP-Proxy" -msgstr "" +msgstr "NDP-проксі" msgid "NT Domain" -msgstr "" +msgstr "Домен NT" msgid "NTP server candidates" -msgstr "Кандидати для синхронізації сервера NTP" +msgstr "Кандидати для синхронізації NTP-сервера" msgid "Name" msgstr "Ім’я" @@ -2195,6 +2269,9 @@ msgstr "Мережеві утиліти" msgid "Network boot image" msgstr "Образ для мережевого завантаження" +msgid "Network device is not present" +msgstr "Мережевий пристрій відсутній" + msgid "Network without interfaces." msgstr "Мережа без інтерфейсів." @@ -2205,10 +2282,10 @@ msgid "No DHCP Server configured for this interface" msgstr "Немає DHCP-сервера, налаштованого для цього інтерфейсу" msgid "No NAT-T" -msgstr "" +msgstr "Немає NAT-T" msgid "No chains in this table" -msgstr "У цій таблиці нема ланцюжків" +msgstr "У цій таблиці немає ланцюжків" msgid "No files found" msgstr "Файли не знайдено" @@ -2216,6 +2293,9 @@ msgstr "Файли не знайдено" msgid "No information available" msgstr "Інформація відсутня" +msgid "No matching prefix delegation" +msgstr "Делегування відповідних префіксів відсутнє" + msgid "No negative cache" msgstr "Ніяких негативних кешувань" @@ -2234,6 +2314,9 @@ msgstr "Пароль не встановлено!" msgid "No rules in this chain" msgstr "У цьму ланцюжку нема правил" +msgid "No scan results available yet..." +msgstr "Результати сканування наразі недоступні" + msgid "No zone assigned" msgstr "Зону не призначено" @@ -2325,7 +2408,7 @@ msgid "One or more fields contain invalid values!" msgstr "Одне або декілька полів містять неприпустимі значення!" msgid "One or more invalid/required values on tab" -msgstr "" +msgstr "Одне або декілька неприпустимих/обов’язкових значень на вкладці" msgid "One or more required fields have no value!" msgstr "Одне або декілька обов’язкових полів не мають значень!" @@ -2346,7 +2429,7 @@ msgid "Option removed" msgstr "Опція видалена" msgid "Optional" -msgstr "Необов’язково" +msgstr "" msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " @@ -2377,10 +2460,13 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "Необов’язково. Створити для цього вузла маршрути для дозволених IP." +msgid "Optional. Description of peer." +msgstr "Необов’язково. Опис вузла." + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." -msgstr "Необов’язково. Хост вузла. Імена буде виділено до підняття інтерфейсу" +msgstr "Необов’язково. Хост вузла. Імена буде виділено до підняття інтерфейсу." msgid "Optional. Maximum Transmission Unit of tunnel interface." msgstr "" @@ -2393,6 +2479,9 @@ msgid "" "Optional. Seconds between keep alive messages. Default is 0 (disabled). " "Recommended value if this device is behind a NAT is 25." msgstr "" +"Необов’язково. Час (сек.) між перевірками активності повідомлень. Типове " +"значення - 0 (вимкнено). Рекомендоване значення для цього пристрою за NAT - " +"25." msgid "Optional. UDP port used for outgoing and incoming packets." msgstr "" @@ -2463,6 +2552,9 @@ msgstr "" ">PIN" +msgid "PIN code rejected" +msgstr "PIN-код відхилено" + msgid "PMK R1 Push" msgstr "Проштовхуваня PMK R1" @@ -2479,7 +2571,7 @@ msgid "PPPoE" msgstr "PPPoE" msgid "PPPoSSH" -msgstr "" +msgstr "PPPoSSH" msgid "PPtP" msgstr "PPtP" @@ -2550,8 +2642,11 @@ msgstr "Пік:" msgid "Peer IP address to assign" msgstr "Запит IP-адреси призначення" +msgid "Peer address is missing" +msgstr "Відсутня адреса вузла" + msgid "Peers" -msgstr "Піри" +msgstr "Вузли" msgid "Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy" @@ -2620,11 +2715,8 @@ msgstr "Перешкоджати прослуховуванню цих інте msgid "Prevents client-to-client communication" msgstr "Перешкоджати спілкуванню клієнт-клієнт" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Бездротовий 802.11b контролер Prism2/2.5/3" - msgid "Private Key" -msgstr "" +msgstr "Приватний ключ" msgid "Proceed" msgstr "Продовжити" @@ -2633,7 +2725,7 @@ msgid "Processes" msgstr "Процеси" msgid "Profile" -msgstr "" +msgstr "Профіль" msgid "Prot." msgstr "Прот." @@ -2660,17 +2752,24 @@ msgid "Pseudo Ad-Hoc (ahdemo)" msgstr "Псевдо Ad-Hoc (ahdemo)" msgid "Public Key" -msgstr "" +msgstr "Відкритий ключ" msgid "Public prefix routed to this device for distribution to clients." -msgstr "" +msgstr "Публічний префікс надісланий на цей пристрій для поширення клієнтам." msgid "QMI Cellular" -msgstr "" +msgstr "Стільниковий QMI" msgid "Quality" msgstr "Якість" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" +"Запит усіх наявних висхідних DNS-серверів" + msgid "R0 Key Lifetime" msgstr "Тривалість життя ключа R0" @@ -2678,7 +2777,7 @@ msgid "R1 Key Holder" msgstr "Власник ключа R1" msgid "RFC3947 NAT-T mode" -msgstr "" +msgstr "Режим RFC3947 NAT-T" msgid "RTS/CTS Threshold" msgstr "Поріг RTS/CTS" @@ -2689,9 +2788,6 @@ msgstr "Одержано" msgid "RX Rate" msgstr "Швидкість приймання" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "Бездротовий 802.11%s контролер RaLink" - msgid "Radius-Accounting-Port" msgstr "Порт Radius-Accounting" @@ -2710,6 +2806,11 @@ msgstr "Секрет Radius-Authentication" msgid "Radius-Authentication-Server" msgstr "Сервер Radius-Authentication" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" +"Сирі шістнадцяткові байти. Залиште порожнім, якщо ваш інтернет-провайдер не " +"вимагає цього." + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2736,20 +2837,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "Дійсно скинути всі зміни?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" -"Дійсно вимкнути мережу? Ви можете втратити доступ до цього пристрою, якщо " -"вас підключено через цю мережу." - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"Дійсно вимкнути інтерфейс \"%s\"? Ви можете втратити доступ до цього " -"пристрою, якщо вас підключено через цей інтерфейс." - msgid "Really switch protocol?" msgstr "Дійсно змінити протокол?" @@ -2790,14 +2877,11 @@ msgid "Receiver Antenna" msgstr "Антена приймача" msgid "Recommended. IP addresses of the WireGuard interface." -msgstr "" +msgstr "Рекомендовано. IP-адреси інтерфейсу WireGuard." msgid "Reconnect this interface" msgstr "Перепідключити цей інтерфейс" -msgid "Reconnecting interface" -msgstr "Перепідключення інтерфейсу" - msgid "References" msgstr "Посилання" @@ -2817,7 +2901,7 @@ msgid "Remote IPv4 address" msgstr "Віддалена адреса IPv4" msgid "Remote IPv4 address or FQDN" -msgstr "" +msgstr "Віддалена адреса IPv4 або FQDN" msgid "Remove" msgstr "Видалити" @@ -2835,7 +2919,7 @@ msgid "Request IPv6-address" msgstr "Запит IPv6-адреси" msgid "Request IPv6-prefix of length" -msgstr "Запит довжини IPv6-префіксу" +msgstr "" msgid "Required" msgstr "Потрібно" @@ -2847,7 +2931,7 @@ msgid "Required. Base64-encoded private key for this interface." msgstr "Потрібно. Base64-закодований закритий ключ для цього інтерфейсу." msgid "Required. Base64-encoded public key of peer." -msgstr "Потрібно. Base64-закодований публічний ключ вузла." +msgstr "Потрібно. Base64-закодований відкритий ключ вузла." msgid "" "Required. IP addresses and prefixes that this peer is allowed to use inside " @@ -2888,6 +2972,12 @@ msgstr "Перезавантажити" msgid "Restart Firewall" msgstr "Перезавантажити брандмауер" +msgid "Restart radio interface" +msgstr "Перезавантажити радіоінтерфейс" + +msgid "Restore" +msgstr "Відновити" + msgid "Restore backup" msgstr "Відновити з резервної копії" @@ -2901,7 +2991,7 @@ msgid "Revert changes" msgstr "Скасувати зміни" msgid "Revert request failed with status %h" -msgstr "Сталася помилка запиту на скасування зі статусом %h" +msgstr "Помилка запиту на скасування зі статусом %h" msgid "Reverting configuration…" msgstr "Відкат конфігурації…" @@ -2919,7 +3009,7 @@ msgid "Route Allowed IPs" msgstr "Маршрутизація дозволених IP-адрес" msgid "Route type" -msgstr "Тип маршруту" +msgstr "" msgid "Router Advertisement-Service" msgstr "Служба оголошень маршрутизатора" @@ -2953,13 +3043,13 @@ msgid "SSH Access" msgstr "SSH-доступ" msgid "SSH server address" -msgstr "" +msgstr "Адреса сервера SSH" msgid "SSH server port" -msgstr "" +msgstr "Порт сервера SSH" msgid "SSH username" -msgstr "" +msgstr "Ім’я користувача SSH" msgid "SSH-Keys" msgstr "SSH-ключі" @@ -2976,17 +3066,20 @@ msgstr "Зберегти і застосувати" msgid "Scan" msgstr "Сканувати" +msgid "Scan request failed" +msgstr "Помилка запиту на сканування" + msgid "Scheduled Tasks" msgstr "Заплановані завдання" msgid "Section added" -msgstr "Секція додана" +msgstr "Секцію додано" msgid "Section removed" -msgstr "Секція видалена" +msgstr "Секцію видалено" msgid "See \"mount\" manpage for details" -msgstr "Подробиці дивись на сторінці керівництва \"mount\"" +msgstr "Подробиці дивись на сторінці керівництва \"mount\"." msgid "" "Send LCP echo requests at the given interval in seconds, only effective in " @@ -2999,7 +3092,7 @@ msgid "Separate Clients" msgstr "Розділяти клієнтів" msgid "Server Settings" -msgstr "Налаштування сервера" +msgstr "Настройки сервера" msgid "Service Name" msgstr "Назва (ім’я) сервісу" @@ -3020,6 +3113,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "Налаштування синхронізації часу" +msgid "Setting PLMN failed" +msgstr "Не вдалося налаштувати PLMN" + +msgid "Setting operation mode failed" +msgstr "Не вдалося налаштувати режим роботи" + msgid "Setup DHCP Server" msgstr "Налаштування DHCP-сервера" @@ -3027,7 +3126,10 @@ msgid "Severely Errored Seconds (SES)" msgstr "" msgid "Short GI" -msgstr "" +msgstr "Short GI" + +msgid "Short Preamble" +msgstr "Коротка преамбула" msgid "Show current backup file list" msgstr "Показати поточний список файлів резервного копіювання" @@ -3035,14 +3137,11 @@ msgstr "Показати поточний список файлів резерв msgid "Shutdown this interface" msgstr "Вимкнути цей інтерфейс" -msgid "Shutdown this network" -msgstr "Вимкнути цю мережу" - msgid "Signal" msgstr "Сигнал" msgid "Signal Attenuation (SATN)" -msgstr "" +msgstr "Затухання сигналу (SATN)" msgid "Signal:" msgstr "Сигнал:" @@ -3051,7 +3150,7 @@ msgid "Size" msgstr "Розмір" msgid "Size (.ipk)" -msgstr "" +msgstr "Розмір (.ipk)" msgid "Size of DNS query cache" msgstr "Розмір кешу запитів DNS" @@ -3072,7 +3171,7 @@ msgid "Software" msgstr "Програмне забезпечення" msgid "Software VLAN" -msgstr "" +msgstr "Програмово реалізований VLAN" msgid "Some fields are invalid, cannot save values!" msgstr "Деякі поля є неприпустимими, неможливо зберегти значення!" @@ -3140,6 +3239,9 @@ msgstr "Стартовий пріоритет" msgid "Starting configuration apply…" msgstr "Застосовується стартова конфігурація…" +msgid "Starting wireless scan..." +msgstr "Розпочато сканування бездротових мереж..." + msgid "Startup" msgstr "Запуск" @@ -3253,10 +3355,10 @@ msgid "Table" msgstr "Таблиця" msgid "Target" -msgstr "Мета" +msgstr "Ціль" msgid "Target network" -msgstr "" +msgstr "Цільова мережа" msgid "Terminate" msgstr "Завершити" @@ -3305,8 +3407,11 @@ msgstr "" "Дозволено символи: A-Z, a-z, 0-9 та " "_" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "Архів резервної копії не є правильним файлом gzip." + msgid "The configuration file could not be loaded due to the following error:" -msgstr "" +msgstr "Файл конфігурації не вдалося завантажити через таку помилку:" msgid "" "The device could not be reached within %d seconds after applying the pending " @@ -3414,8 +3519,8 @@ msgid "" msgstr "" "Система перепрошивається.
      НЕ ВИМИКАЙТЕ ЖИВЛЕННЯ ПРИСТРОЮ!
      Зачекайте кілька хвилин перед тим, як пробувати знову " -"під’єднатися. Залежно від налаштувань, можливо, треба буде оновити адресу " -"вашого комп’ютера, щоб знову отримати доступ до пристрою." +"з'єднатися. Залежно від ваших настройок, можливо, вам треба буде оновити " +"адресу вашого комп'ютера, щоб знову отримати доступ до пристрою." msgid "" "The uploaded image file does not contain a supported format. Make sure that " @@ -3525,7 +3630,7 @@ msgid "" msgstr "У цьому списку наведено працюючі наразі системні процеси та їх стан." msgid "This page gives an overview over currently active network connections." -msgstr "Ця сторінка надає огляд поточних активних мережних підключень." +msgstr "Ця сторінка надає огляд поточних активних мережевих підключень." msgid "This section contains no values yet" msgstr "Ця секція поки що не містить значень" @@ -3541,10 +3646,12 @@ msgstr "Часовий пояс" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Щоб відновити файли конфігурації, ви можете відвантажити раніше створений " -"архів резервної копії." +"архів резервної копії. Для відновлення мікропрограми до її початкового стану " +"натисніть кнопку \"Відновити\" (можливо тільки з образами SquashFS)." msgid "Tone" msgstr "Тоновий" @@ -3586,7 +3693,7 @@ msgid "Tunnel Interface" msgstr "Інтерфейс тунелю" msgid "Tunnel Link" -msgstr "Посилання тунелю" +msgstr "" msgid "Tx-Power" msgstr "Потужність передавача" @@ -3612,8 +3719,26 @@ msgstr "USB-порт" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "Не вдається визначити ім’я пристрою" + +msgid "Unable to determine external IP address" +msgstr "Не вдається визначити зовнішню ІР-адресу" + +msgid "Unable to determine upstream interface" +msgstr "Не вдається визначити висхідний інтерфейс" + msgid "Unable to dispatch" -msgstr "Не вдалося опрацювати запит" +msgstr "Не вдається опрацювати запит" + +msgid "Unable to obtain client ID" +msgstr "Не вдається отримати ідентифікатор клієнта" + +msgid "Unable to resolve AFTR host name" +msgstr "Не вдається розрізнити ім’я хоста AFTR" + +msgid "Unable to resolve peer host name" +msgstr "Не вдається розрізнити ім’я хоста вузла" msgid "Unavailable Seconds (UAS)" msgstr "Недоступні секунди (UAS)" @@ -3622,7 +3747,10 @@ msgid "Unknown" msgstr "Невідомо" msgid "Unknown Error, password not changed!" -msgstr "Невідома помилка, пароль не змінився!" +msgstr "Невідома помилка, пароль не змінено!" + +msgid "Unknown error (%s)" +msgstr "Невідома помилка (%s)" msgid "Unmanaged" msgstr "Некерований" @@ -3633,6 +3761,12 @@ msgstr "Демонтувати" msgid "Unsaved Changes" msgstr "Незбережені зміни" +msgid "Unsupported MAP type" +msgstr "Непідтримуваний тип MAP" + +msgid "Unsupported modem" +msgstr "Непідтримуваний модем" + msgid "Unsupported protocol type." msgstr "Непідтримуваний тип протоколу." @@ -3779,6 +3913,9 @@ msgstr "Перевірте" msgid "Version" msgstr "Версія" +msgid "Virtual dynamic interface" +msgstr "Віртуальний динамічний інтерфейс" + msgid "WDS" msgstr "WDS" @@ -3827,7 +3964,6 @@ msgid "" "When using a PSK, the PMK can be generated locally without inter AP " "communications" msgstr "" -"При використанні PSK, PMK може бути створений локально без взаємодії між AP" msgid "Width" msgstr "Ширина" @@ -3850,8 +3986,11 @@ msgstr "Огляд бездротових мереж" msgid "Wireless Security" msgstr "Безпека бездротової мережі" -msgid "Wireless is disabled or not associated" -msgstr "Бездротову мережу вимкнено або не пов’язано" +msgid "Wireless is disabled" +msgstr "Бездротову мережу вимкнено" + +msgid "Wireless is not associated" +msgstr "Бездротову мережу не пов’язано" msgid "Wireless is restarting..." msgstr "Бездротова мережа перезапускається..." @@ -3862,12 +4001,6 @@ msgstr "Бездротову мережу вимкнено" msgid "Wireless network is enabled" msgstr "Бездротову мережу ввімкнено" -msgid "Wireless restarted" -msgstr "Бездротову мережу перезапущено" - -msgid "Wireless shut down" -msgstr "Бездротова мережа припинила роботу" - msgid "Write received DNS requests to syslog" msgstr "Записувати отримані DNS-запити до системного журналу" @@ -3958,7 +4091,7 @@ msgid "hybrid mode" msgstr "гібридний режим" msgid "if target is a network" -msgstr "якщо мета — мережа" +msgstr "якщо ціль — мережа" msgid "input" msgstr "вхід" @@ -3980,6 +4113,9 @@ msgstr "" msgid "minutes" msgstr "хв." +msgid "mixed WPA/WPA2" +msgstr "змішаний WPA/WPA2" + msgid "no" msgstr "ні" diff --git a/luci-base/po/vi/base.po b/luci-base/po/vi/base.po index cfd6caa5c..315f260d0 100644 --- a/luci-base/po/vi/base.po +++ b/luci-base/po/vi/base.po @@ -152,9 +152,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "" -msgid "%s - %s" -msgstr "" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -211,9 +208,6 @@ msgstr "Điểm truy cập" msgid "Actions" msgstr "Hành động" -msgid "Activate this network" -msgstr "" - msgid "Active IPv4-Routes" msgstr "Active IPv4-Routes" @@ -265,6 +259,18 @@ msgstr "" msgid "Alert" msgstr "" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -276,6 +282,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "Cho phép SSH xác thực mật mã" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "Cho phép tất cả trừ danh sách liệt kê" @@ -307,6 +316,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -483,11 +497,11 @@ msgstr "" msgid "Back to scan results" msgstr "" -msgid "Backup / Flash Firmware" +msgid "Backup" msgstr "" -msgid "Backup / Restore" -msgstr "Backup/ Restore" +msgid "Backup / Flash Firmware" +msgstr "" msgid "Backup file list" msgstr "" @@ -498,6 +512,9 @@ msgstr "" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -551,6 +568,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU usage (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "Bỏ qua" @@ -612,8 +632,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -649,6 +668,9 @@ msgstr "" msgid "Configuration" msgstr "Cấu hình" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "" @@ -670,6 +692,9 @@ msgstr "" msgid "Connection Limit" msgstr "Giới hạn kết nối" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "" @@ -783,6 +808,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "" @@ -819,6 +847,9 @@ msgstr "Xóa" msgid "Delete this network" msgstr "" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "Mô tả" @@ -837,10 +868,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -866,15 +897,24 @@ msgstr "" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1165,6 +1205,9 @@ msgstr "Filter private" msgid "Filter useless" msgstr "Lọc không hữu dụng" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1218,6 +1261,9 @@ msgstr "" msgid "Force" msgstr "Force" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "" @@ -1280,6 +1326,9 @@ msgstr "" msgid "Gateway" msgstr "" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "" @@ -1352,9 +1401,6 @@ msgid "" "authentication." msgstr "" -msgid "Hermes 802.11b Wireless Controller" -msgstr "" - msgid "Hide ESSID" msgstr "Giấu ESSID" @@ -1370,6 +1416,9 @@ msgstr "" msgid "Host-IP or Network" msgstr "Host-IP or Network" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "Tên host" @@ -1391,6 +1440,12 @@ msgstr "" msgid "IP address" msgstr "Địa chỉ IP" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "" @@ -1559,6 +1614,9 @@ msgstr "" msgid "Info" msgstr "" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "Initscript" @@ -1595,21 +1653,12 @@ msgstr "" msgid "Interface is reconnecting..." msgstr "" -msgid "Interface is shutting down..." -msgstr "" - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "" -msgid "Interface reconnected" -msgstr "" - -msgid "Interface shut down" -msgstr "" - msgid "Interfaces" msgstr "Giao diện " @@ -1798,6 +1847,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1862,6 +1914,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "" @@ -1877,6 +1932,9 @@ msgstr "Danh sách MAC" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "" @@ -1956,6 +2014,9 @@ msgstr "" msgid "Modem device" msgstr "Thiết bị modem" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "" @@ -2053,6 +2114,9 @@ msgstr "" msgid "Network boot image" msgstr "" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "" @@ -2074,6 +2138,9 @@ msgstr "" msgid "No information available" msgstr "" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "" @@ -2092,6 +2159,9 @@ msgstr "" msgid "No rules in this chain" msgstr "Không có quy luật trong chuỗi này" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "" @@ -2226,6 +2296,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2304,6 +2377,9 @@ msgstr "PID" msgid "PIN" msgstr "" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2391,6 +2467,9 @@ msgstr "" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2459,9 +2538,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "Ngăn chặn giao tiếp giữa client-và-client" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "" - msgid "Private Key" msgstr "" @@ -2510,6 +2586,11 @@ msgstr "" msgid "Quality" msgstr "" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2528,9 +2609,6 @@ msgstr "RX" msgid "RX Rate" msgstr "" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "" - msgid "Radius-Accounting-Port" msgstr "" @@ -2549,6 +2627,9 @@ msgstr "" msgid "Radius-Authentication-Server" msgstr "" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2569,16 +2650,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" - msgid "Really switch protocol?" msgstr "" @@ -2624,9 +2695,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "" -msgid "Reconnecting interface" -msgstr "" - msgid "References" msgstr "Tham chiếu" @@ -2715,6 +2783,12 @@ msgstr "" msgid "Restart Firewall" msgstr "Khởi động lại Firewall" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "Phục hồi backup" @@ -2803,6 +2877,9 @@ msgstr "Lưu & áp dụng " msgid "Scan" msgstr "Scan" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "Scheduled Tasks" @@ -2843,6 +2920,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "" @@ -2852,15 +2935,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "" msgid "Shutdown this interface" msgstr "" -msgid "Shutdown this network" -msgstr "" - msgid "Signal" msgstr "" @@ -2956,6 +3039,9 @@ msgstr "Bắt đầu ưu tiên" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "" @@ -3102,6 +3188,9 @@ msgid "" "code> and _" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3297,7 +3386,8 @@ msgstr "Múi giờ " msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3366,9 +3456,27 @@ msgstr "" msgid "UUID" msgstr "" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3378,6 +3486,9 @@ msgstr "" msgid "Unknown Error, password not changed!" msgstr "" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "" @@ -3387,6 +3498,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "Thay đổi không lưu" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "" @@ -3523,6 +3640,9 @@ msgstr "" msgid "Version" msgstr "Phiên bản" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3590,7 +3710,10 @@ msgstr "" msgid "Wireless Security" msgstr "" -msgid "Wireless is disabled or not associated" +msgid "Wireless is disabled" +msgstr "" + +msgid "Wireless is not associated" msgstr "" msgid "Wireless is restarting..." @@ -3602,12 +3725,6 @@ msgstr "" msgid "Wireless network is enabled" msgstr "" -msgid "Wireless restarted" -msgstr "" - -msgid "Wireless shut down" -msgstr "" - msgid "Write received DNS requests to syslog" msgstr "" @@ -3713,6 +3830,9 @@ msgstr "Tập tin DNS địa phương" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "" @@ -3788,6 +3908,9 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "Backup / Restore" +#~ msgstr "Backup/ Restore" + #~ msgid "Apply" #~ msgstr "Áp dụng" diff --git a/luci-base/po/zh-cn/base.po b/luci-base/po/zh-cn/base.po index 9490022f5..23a3ee294 100644 --- a/luci-base/po/zh-cn/base.po +++ b/luci-base/po/zh-cn/base.po @@ -147,9 +147,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "最大并发查询数" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -209,9 +206,6 @@ msgstr "接入点 AP" msgid "Actions" msgstr "动作" -msgid "Activate this network" -msgstr "激活此网络" - msgid "Active IPv4-Routes" msgstr "活动的 IPv4 路由" @@ -263,6 +257,18 @@ msgstr "总发射功率(ACTATP)" msgid "Alert" msgstr "警戒" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -274,6 +280,9 @@ msgstr "顺序分配 IP" msgid "Allow SSH password authentication" msgstr "允许 SSH 密码验证" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "仅允许列表外" @@ -305,6 +314,11 @@ msgstr "允许的 IP" msgid "Always announce default router" msgstr "总是通告默认路由" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "Annex" @@ -481,12 +495,12 @@ msgstr "返回至概况" msgid "Back to scan results" msgstr "返回至扫描结果" +msgid "Backup" +msgstr "备份" + msgid "Backup / Flash Firmware" msgstr "备份/升级" -msgid "Backup / Restore" -msgstr "备份/恢复" - msgid "Backup file list" msgstr "文件备份列表" @@ -496,6 +510,9 @@ msgstr "指定了错误的地址!" msgid "Band" msgstr "频宽" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -551,6 +568,9 @@ msgstr "CA 证书,如果留空,则证书将在第一次连接后被保存。 msgid "CPU usage (%)" msgstr "CPU 使用率(%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "取消" @@ -614,11 +634,8 @@ msgstr "Cisco UDP 封装" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." -msgstr "" -"点击“生成备份”下载当前配置文件的 tar 存档。要将固件恢复到初始状态,请单击“执" -"行重置”(仅 squashfs 格式的固件有效)。" +"configuration files." +msgstr "点击“生成备份”下载当前配置文件的 tar 存档。" msgid "Client" msgstr "客户端 Client" @@ -656,6 +673,9 @@ msgstr "" msgid "Configuration" msgstr "配置" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "配置文件将被保留。" @@ -677,6 +697,9 @@ msgstr "已连接" msgid "Connection Limit" msgstr "连接数限制" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "连接" @@ -791,6 +814,9 @@ msgstr "DSL 状态" msgid "DSL line mode" msgstr "DSL 线路模式" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DUID" @@ -829,6 +855,9 @@ msgstr "删除" msgid "Delete this network" msgstr "删除此网络" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "描述" @@ -847,11 +876,11 @@ msgstr "设备配置" msgid "Device is rebooting..." msgstr "设备正在重启..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "无法连接到设备" -msgid "Device unreachable!" -msgstr "无法连接到设备!" +msgid "Device unreachable! Still waiting for device..." +msgstr "" msgid "Diagnostics" msgstr "网络诊断" @@ -878,15 +907,24 @@ msgstr "停用 DNS 设定" msgid "Disable Encryption" msgstr "禁用加密" +msgid "Disable this network" +msgstr "禁用此网络" + msgid "Disabled" -msgstr "禁用" +msgstr "已禁用" msgid "Disabled (default)" msgstr "禁用(默认)" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "丢弃 RFC1918 上行响应数据" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "解除" @@ -1066,7 +1104,7 @@ msgid "Enable/Disable" msgstr "启用/禁用" msgid "Enabled" -msgstr "启用" +msgstr "已启用" msgid "Enables IGMP snooping on this bridge" msgstr "在此桥接上启用 IGMP 窥探" @@ -1176,6 +1214,9 @@ msgstr "过滤本地包" msgid "Filter useless" msgstr "过滤无用包" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1229,6 +1270,9 @@ msgstr "刷写中..." msgid "Force" msgstr "强制" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "强制 CCMP(AES)" @@ -1293,6 +1337,9 @@ msgstr "仅 GPRS" msgid "Gateway" msgstr "网关" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "网关端口" @@ -1356,16 +1403,13 @@ msgstr "请求头错误代码错误(HEC)" msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." -msgstr "配置路由器的部分基础信息。" +msgstr "此处配置设备的基础信息,如主机名称或时区。" msgid "" "Here you can paste public SSH-Keys (one per line) for SSH public-key " "authentication." msgstr "请在此处粘贴 SSH 公钥,每行一个,用于 SSH 公钥认证。" -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b 无线控制器" - msgid "Hide ESSID" msgstr "隐藏 ESSID" @@ -1381,6 +1425,9 @@ msgstr "主机到期超时" msgid "Host-IP or Network" msgstr "主机 IP 或网络" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "主机名" @@ -1402,6 +1449,12 @@ msgstr "IP 地址" msgid "IP address" msgstr "IP 地址" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4" @@ -1508,10 +1561,10 @@ msgid "Identity" msgstr "鉴权" msgid "If checked, 1DES is enabled" -msgstr "选中以启用 1DES" +msgstr "如果选中,则启用1DES。" msgid "If checked, encryption is disabled" -msgstr "选中以禁用加密" +msgstr "如果选中,则禁用加密" msgid "" "If specified, mount the device by its UUID instead of a fixed device node" @@ -1571,6 +1624,9 @@ msgstr "入站:" msgid "Info" msgstr "信息" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "启动脚本" @@ -1607,21 +1663,12 @@ msgstr "接口总览" msgid "Interface is reconnecting..." msgstr "正在重新连接接口..." -msgid "Interface is shutting down..." -msgstr "正在关闭接口..." - msgid "Interface name" msgstr "接口名称" msgid "Interface not present or not connected yet." msgstr "接口不存在或未连接。" -msgid "Interface reconnected" -msgstr "接口已重新连接" - -msgid "Interface shut down" -msgstr "接口已关闭" - msgid "Interfaces" msgstr "接口" @@ -1815,6 +1862,9 @@ msgstr "平均负载" msgid "Loading" msgstr "加载中" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "要分配的本地 IP 地址" @@ -1879,6 +1929,9 @@ msgstr "信号丢失秒数(LOSS)" msgid "Lowest leased address as offset from the network address." msgstr "网络地址的起始分配基址。" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC 地址" @@ -1894,6 +1947,9 @@ msgstr "MAC 列表" msgid "MAP / LW4over6" msgstr "MAP / LW4over6" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1975,6 +2031,9 @@ msgstr "主机型号" msgid "Modem device" msgstr "调制解调器节点" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "调制解调器初始化超时" @@ -2070,6 +2129,9 @@ msgstr "网络工具" msgid "Network boot image" msgstr "网络启动镜像" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "无接口的网络。" @@ -2091,6 +2153,9 @@ msgstr "未找到文件" msgid "No information available" msgstr "无可用信息" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "禁用无效信息缓存" @@ -2109,6 +2174,9 @@ msgstr "未设置密码!" msgid "No rules in this chain" msgstr "本链没有规则" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "未指定区域" @@ -2245,6 +2313,9 @@ msgstr "可选,Base64 编码的预共享密钥。" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "可选,为此 Peer 创建允许 IP 的路由。" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2325,6 +2396,9 @@ msgstr "PID" msgid "PIN" msgstr "PIN" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "R1 推送 PMK" @@ -2412,6 +2486,9 @@ msgstr "峰值:" msgid "Peer IP address to assign" msgstr "要分配的 Peer IP 地址" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "Peers" @@ -2480,9 +2557,6 @@ msgstr "不监听这些接口。" msgid "Prevents client-to-client communication" msgstr "禁止客户端间通信" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b 无线控制器" - msgid "Private Key" msgstr "私钥" @@ -2531,6 +2605,11 @@ msgstr "QMI 蜂窝" msgid "Quality" msgstr "质量" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "R0 密钥生存期" @@ -2549,9 +2628,6 @@ msgstr "接收" msgid "RX Rate" msgstr "接收速率" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s 无线控制器" - msgid "Radius-Accounting-Port" msgstr "Radius 计费端口" @@ -2570,6 +2646,9 @@ msgstr "Radius 认证密钥" msgid "Radius-Authentication-Server" msgstr "Radius 认证服务器" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2592,18 +2671,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "确定要放弃所有更改?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"确定要关闭接口 \"%s\"?\\n如果您正在使用此接口连接路由器,关闭此网络可能导致" -"连接断开!" - msgid "Really switch protocol?" msgstr "确定要切换协议?" @@ -2649,9 +2716,6 @@ msgstr "推荐,Wire Guard 接口的 IP 地址。" msgid "Reconnect this interface" msgstr "重连此接口" -msgid "Reconnecting interface" -msgstr "重连接口中..." - msgid "References" msgstr "引用" @@ -2744,6 +2808,12 @@ msgstr "重启" msgid "Restart Firewall" msgstr "重启防火墙" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "恢复" + msgid "Restore backup" msgstr "恢复配置" @@ -2830,6 +2900,9 @@ msgstr "保存并应用" msgid "Scan" msgstr "扫描" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "计划任务" @@ -2872,6 +2945,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "设置时间同步" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "配置 DHCP 服务器" @@ -2881,15 +2960,15 @@ msgstr "严重误码秒(SES)" msgid "Short GI" msgstr "Short GI" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "显示当前备份文件列表" msgid "Shutdown this interface" msgstr "关闭此接口" -msgid "Shutdown this network" -msgstr "关闭此网络" - msgid "Signal" msgstr "信号" @@ -2987,6 +3066,9 @@ msgstr "启动优先级" msgid "Starting configuration apply…" msgstr "开始应用配置..." +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "启动项" @@ -3140,6 +3222,9 @@ msgstr "" "合法字符:A-Z, a-z, 0-9_" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "由于以下错误,配置文件无法被加载:" @@ -3339,8 +3424,11 @@ msgstr "时区" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." -msgstr "上传备份存档以恢复配置。" +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." +msgstr "" +"上传备份存档以恢复配置。要将固件恢复到初始状态,请单击“执行重置”(仅 " +"squashfs 格式的固件有效)。" msgid "Tone" msgstr "Tone" @@ -3408,9 +3496,27 @@ msgstr "USB 接口" msgid "UUID" msgstr "UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "无法调度" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "不可用秒数(UAS)" @@ -3420,6 +3526,9 @@ msgstr "未知" msgid "Unknown Error, password not changed!" msgstr "未知错误,密码未更改!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "不配置协议" @@ -3429,6 +3538,12 @@ msgstr "卸载分区" msgid "Unsaved Changes" msgstr "未保存的配置" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "不支持的协议类型" @@ -3572,6 +3687,9 @@ msgstr "验证" msgid "Version" msgstr "版本" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "WDS" @@ -3641,23 +3759,20 @@ msgstr "无线概况" msgid "Wireless Security" msgstr "无线安全" -msgid "Wireless is disabled or not associated" -msgstr "无线未开启或未关联" +msgid "Wireless is disabled" +msgstr "无线未开启" + +msgid "Wireless is not associated" +msgstr "无线未未关联" msgid "Wireless is restarting..." msgstr "无线重启中..." msgid "Wireless network is disabled" -msgstr "无线已禁用" +msgstr "无线网络已禁用" msgid "Wireless network is enabled" -msgstr "无线网络开关" - -msgid "Wireless restarted" -msgstr "无线已重启" - -msgid "Wireless shut down" -msgstr "无线已关闭" +msgstr "无线网络已启用" msgid "Write received DNS requests to syslog" msgstr "将收到的 DNS 请求写入系统日志" @@ -3764,6 +3879,9 @@ msgstr "本地 DNS 解析文件" msgid "minutes" msgstr "分钟" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "否" @@ -3839,6 +3957,52 @@ msgstr "是" msgid "« Back" msgstr "« 后退" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "激活此网络" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b 无线控制器" + +#~ msgid "Interface is shutting down..." +#~ msgstr "正在关闭接口..." + +#~ msgid "Interface reconnected" +#~ msgstr "接口已重新连接" + +#~ msgid "Interface shut down" +#~ msgstr "接口已关闭" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b 无线控制器" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s 无线控制器" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "确定要关闭接口 \"%s\"?\\n如果您正在使用此接口连接路由器,关闭此网络可能导" +#~ "致连接断开!" + +#~ msgid "Reconnecting interface" +#~ msgstr "重连接口中..." + +#~ msgid "Shutdown this network" +#~ msgstr "关闭此网络" + +#~ msgid "Wireless restarted" +#~ msgstr "无线已重启" + +#~ msgid "Wireless shut down" +#~ msgstr "无线已关闭" + +#~ msgid "Device unreachableX" +#~ msgstr "无法连接到设备!" + #~ msgid "DHCP Leases" #~ msgstr "DHCP 分配" diff --git a/luci-base/po/zh-tw/base.po b/luci-base/po/zh-tw/base.po index c0e54a5c2..c4e29a31c 100644 --- a/luci-base/po/zh-tw/base.po +++ b/luci-base/po/zh-tw/base.po @@ -153,9 +153,6 @@ msgstr "" msgid "Max. concurrent queries" msgstr "最大並發查詢數" -msgid "%s - %s" -msgstr "%s - %s" - msgid "" "
      Note: you need to manually restart the cron service if the crontab file " "was empty before editing." @@ -214,9 +211,6 @@ msgstr "存取點 (AP)" msgid "Actions" msgstr "動作" -msgid "Activate this network" -msgstr "啟用此網路" - msgid "Active IPv4-Routes" msgstr "啟用 IPv4-路由" @@ -268,6 +262,18 @@ msgstr "" msgid "Alert" msgstr "警示" +msgid "Alias Interface" +msgstr "" + +msgid "Alias interface" +msgstr "" + +msgid "Alias of \"%s\"" +msgstr "" + +msgid "All Servers" +msgstr "" + msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" @@ -279,6 +285,9 @@ msgstr "" msgid "Allow SSH password authentication" msgstr "允許 SSH 密碼驗證" +msgid "Allow AP mode to disconnect STAs based on low ACK condition" +msgstr "" + msgid "Allow all except listed" msgstr "僅允許列表外" @@ -310,6 +319,11 @@ msgstr "" msgid "Always announce default router" msgstr "" +msgid "" +"Always use 40MHz channels even if the secondary channel overlaps. Using this " +"option does not comply with IEEE 802.11n-2009!" +msgstr "" + msgid "Annex" msgstr "" @@ -486,12 +500,12 @@ msgstr "返回至總覽" msgid "Back to scan results" msgstr "返回至掃描結果" +msgid "Backup" +msgstr "備份" + msgid "Backup / Flash Firmware" msgstr "備份/升級韌體" -msgid "Backup / Restore" -msgstr "備份/還原" - msgid "Backup file list" msgstr "備份檔列表" @@ -501,6 +515,9 @@ msgstr "指定了錯誤的位置!" msgid "Band" msgstr "" +msgid "Beacon Interval" +msgstr "" + msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -556,6 +573,9 @@ msgstr "" msgid "CPU usage (%)" msgstr "CPU 使用率 (%)" +msgid "Call failed" +msgstr "" + msgid "Cancel" msgstr "取消" @@ -621,11 +641,8 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." -msgstr "" -"按下\"壓縮檔製作\"就能下載目前設定檔的tar格式的壓縮. 要重置回復出廠值,按下" -"\"執行還原\"(可能只對squashfs影像檔有效)" +"configuration files." +msgstr "按下\"壓縮檔製作\"就能下載目前設定檔的tar格式的壓縮." msgid "Client" msgstr "用戶端" @@ -660,6 +677,9 @@ msgstr "" msgid "Configuration" msgstr "設定" +msgid "Configuration failed" +msgstr "" + msgid "Configuration files will be kept." msgstr "設定檔將被存檔" @@ -681,6 +701,9 @@ msgstr "已連線" msgid "Connection Limit" msgstr "連線限制" +msgid "Connection attempt failed" +msgstr "" + msgid "Connections" msgstr "連線數" @@ -794,6 +817,9 @@ msgstr "" msgid "DSL line mode" msgstr "" +msgid "DTIM Interval" +msgstr "" + msgid "DUID" msgstr "DHCP獨立式別碼DUID " @@ -832,6 +858,9 @@ msgstr "刪除" msgid "Delete this network" msgstr "刪除這個網路" +msgid "Delivery Traffic Indication Message Interval" +msgstr "" + msgid "Description" msgstr "描述" @@ -850,10 +879,10 @@ msgstr "設定設備" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -880,15 +909,24 @@ msgstr "關閉DNS設置" msgid "Disable Encryption" msgstr "" +msgid "Disable this network" +msgstr "" + msgid "Disabled" msgstr "關閉" msgid "Disabled (default)" msgstr "" +msgid "Disassociate On Low Acknowledgement" +msgstr "" + msgid "Discard upstream RFC1918 responses" msgstr "丟棄上游RFC1918 虛擬IP網路的回應" +msgid "Disconnection attempt failed" +msgstr "" + msgid "Dismiss" msgstr "" @@ -1178,6 +1216,9 @@ msgstr "私人過濾器" msgid "Filter useless" msgstr "無用過濾器" +msgid "Finalizing failed" +msgstr "" + msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" @@ -1231,6 +1272,9 @@ msgstr "更新中..." msgid "Force" msgstr "強制" +msgid "Force 40MHz mode" +msgstr "" + msgid "Force CCMP (AES)" msgstr "強制CCMP (AES)加密" @@ -1293,6 +1337,9 @@ msgstr "僅用GPRS" msgid "Gateway" msgstr "匝道器" +msgid "Gateway address is invalid" +msgstr "" + msgid "Gateway ports" msgstr "匝道器埠號" @@ -1363,9 +1410,6 @@ msgid "" "authentication." msgstr "在這裡貼上公用SSH-Keys (每行一個)以便驗證" -msgid "Hermes 802.11b Wireless Controller" -msgstr "Hermes 802.11b 無線網路控制器" - msgid "Hide ESSID" msgstr "隱藏 ESSID" @@ -1381,6 +1425,9 @@ msgstr "過期主機" msgid "Host-IP or Network" msgstr "主機-IP 或網路" +msgid "Host-Uniq tag content" +msgstr "" + msgid "Hostname" msgstr "主機名稱" @@ -1402,6 +1449,12 @@ msgstr "" msgid "IP address" msgstr "IP位址" +msgid "IP address in invalid" +msgstr "" + +msgid "IP address is missing" +msgstr "" + msgid "IPv4" msgstr "IPv4版" @@ -1569,6 +1622,9 @@ msgstr "輸入" msgid "Info" msgstr "訊息" +msgid "Initialization failure" +msgstr "" + msgid "Initscript" msgstr "初始化腳本" @@ -1605,21 +1661,12 @@ msgstr "介面預覽" msgid "Interface is reconnecting..." msgstr "介面重連" -msgid "Interface is shutting down..." -msgstr "介面正在關閉中..." - msgid "Interface name" msgstr "" msgid "Interface not present or not connected yet." msgstr "介面尚未出線或者還沒連上" -msgid "Interface reconnected" -msgstr "介面已重連" - -msgid "Interface shut down" -msgstr "介面關閉" - msgid "Interfaces" msgstr "介面" @@ -1806,6 +1853,9 @@ msgstr "平均掛載" msgid "Loading" msgstr "掛載中" +msgid "Local IP address is invalid" +msgstr "" + msgid "Local IP address to assign" msgstr "" @@ -1871,6 +1921,9 @@ msgstr "" msgid "Lowest leased address as offset from the network address." msgstr "最低的釋放位址從這網路位址的偏移計算" +msgid "MAC" +msgstr "" + msgid "MAC-Address" msgstr "MAC-位址" @@ -1886,6 +1939,9 @@ msgstr "MAC-清單" msgid "MAP / LW4over6" msgstr "" +msgid "MAP rule is invalid" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1965,6 +2021,9 @@ msgstr "" msgid "Modem device" msgstr "數據機設備" +msgid "Modem information query failed" +msgstr "" + msgid "Modem init timeout" msgstr "數據機初始化終結時間" @@ -2060,6 +2119,9 @@ msgstr "網路多項工具" msgid "Network boot image" msgstr "網路開機映像檔" +msgid "Network device is not present" +msgstr "" + msgid "Network without interfaces." msgstr "尚無任何介面的網路." @@ -2081,6 +2143,9 @@ msgstr "尚未發現任何檔案" msgid "No information available" msgstr "尚無可運用資訊" +msgid "No matching prefix delegation" +msgstr "" + msgid "No negative cache" msgstr "尚無拒絕的快取" @@ -2099,6 +2164,9 @@ msgstr "尚未設定密碼!" msgid "No rules in this chain" msgstr "尚無規則在這個鏈接上" +msgid "No scan results available yet..." +msgstr "" + msgid "No zone assigned" msgstr "尚未指定區碼" @@ -2231,6 +2299,9 @@ msgstr "" msgid "Optional. Create routes for Allowed IPs for this peer." msgstr "" +msgid "Optional. Description of peer." +msgstr "" + msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." @@ -2309,6 +2380,9 @@ msgstr "PID碼" msgid "PIN" msgstr "PIN碼" +msgid "PIN code rejected" +msgstr "" + msgid "PMK R1 Push" msgstr "" @@ -2396,6 +2470,9 @@ msgstr "峰值:" msgid "Peer IP address to assign" msgstr "" +msgid "Peer address is missing" +msgstr "" + msgid "Peers" msgstr "" @@ -2464,9 +2541,6 @@ msgstr "" msgid "Prevents client-to-client communication" msgstr "防止用戶端對用戶端的通訊" -msgid "Prism2/2.5/3 802.11b Wireless Controller" -msgstr "Prism2/2.5/3 802.11b 無線控制器" - msgid "Private Key" msgstr "" @@ -2515,6 +2589,11 @@ msgstr "" msgid "Quality" msgstr "品質" +msgid "" +"Query all available upstream DNS " +"servers" +msgstr "" + msgid "R0 Key Lifetime" msgstr "" @@ -2533,9 +2612,6 @@ msgstr "接收" msgid "RX Rate" msgstr "接收速率" -msgid "RaLink 802.11%s Wireless Controller" -msgstr "RaLink 802.11%s 無線控制器" - msgid "Radius-Accounting-Port" msgstr "Radius-驗証帳號-埠" @@ -2554,6 +2630,9 @@ msgstr "Radius-驗証-密碼" msgid "Radius-Authentication-Server" msgstr "Radius-驗証-伺服器" +msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" +msgstr "" + msgid "" "Read /etc/ethers to configure the DHCP-Server" @@ -2576,18 +2655,6 @@ msgstr "" msgid "Really reset all changes?" msgstr "確定要重置回復原廠?" -msgid "" -"Really shut down network? You might lose access to this device if you are " -"connected via this interface" -msgstr "" - -msgid "" -"Really shutdown interface \"%s\"? You might lose access to this device if " -"you are connected via this interface." -msgstr "" -"真的要關閉這個介面 \"%s\" ?!\n" -"假如您要透過這個介面連線您可能會無法存取這個設備." - msgid "Really switch protocol?" msgstr "確定要更換協定?" @@ -2633,9 +2700,6 @@ msgstr "" msgid "Reconnect this interface" msgstr "重新連接這個介面" -msgid "Reconnecting interface" -msgstr "重連這個介面中" - msgid "References" msgstr "引用" @@ -2724,6 +2788,12 @@ msgstr "重啟" msgid "Restart Firewall" msgstr "重啟防火牆" +msgid "Restart radio interface" +msgstr "" + +msgid "Restore" +msgstr "還原" + msgid "Restore backup" msgstr "還原之前備份設定" @@ -2810,6 +2880,9 @@ msgstr "保存並啟用" msgid "Scan" msgstr "掃描" +msgid "Scan request failed" +msgstr "" + msgid "Scheduled Tasks" msgstr "排程任務" @@ -2851,6 +2924,12 @@ msgstr "" msgid "Set up Time Synchronization" msgstr "安裝校時同步" +msgid "Setting PLMN failed" +msgstr "" + +msgid "Setting operation mode failed" +msgstr "" + msgid "Setup DHCP Server" msgstr "安裝DHCP伺服器" @@ -2860,15 +2939,15 @@ msgstr "" msgid "Short GI" msgstr "" +msgid "Short Preamble" +msgstr "" + msgid "Show current backup file list" msgstr "顯示現今的備份檔清單" msgid "Shutdown this interface" msgstr "關閉這個介面" -msgid "Shutdown this network" -msgstr "關閉這個網路" - msgid "Signal" msgstr "信號" @@ -2966,6 +3045,9 @@ msgstr "啟用優先權順序" msgid "Starting configuration apply…" msgstr "" +msgid "Starting wireless scan..." +msgstr "" + msgid "Startup" msgstr "啟動" @@ -3123,6 +3205,9 @@ msgstr "" "所允許的字元是: A-Z, a-z, 0-9 and " "_" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3324,8 +3409,11 @@ msgstr "時區" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." -msgstr "要復元設定檔, 可以上傳之前製作的備份壓縮檔放這." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." +msgstr "" +"要復元設定檔, 可以上傳之前製作的備份壓縮檔放這. 要重置回復出廠值,按下\"執行還" +"原\"(可能只對squashfs影像檔有效)" msgid "Tone" msgstr "" @@ -3393,9 +3481,27 @@ msgstr "" msgid "UUID" msgstr "設備通用唯一識別碼UUID" +msgid "Unable to determine device name" +msgstr "" + +msgid "Unable to determine external IP address" +msgstr "" + +msgid "Unable to determine upstream interface" +msgstr "" + msgid "Unable to dispatch" msgstr "無法發送" +msgid "Unable to obtain client ID" +msgstr "" + +msgid "Unable to resolve AFTR host name" +msgstr "" + +msgid "Unable to resolve peer host name" +msgstr "" + msgid "Unavailable Seconds (UAS)" msgstr "" @@ -3405,6 +3511,9 @@ msgstr "未知" msgid "Unknown Error, password not changed!" msgstr "未知錯誤, 密碼尚未改變!" +msgid "Unknown error (%s)" +msgstr "" + msgid "Unmanaged" msgstr "非託管" @@ -3414,6 +3523,12 @@ msgstr "" msgid "Unsaved Changes" msgstr "尚未存檔的修改" +msgid "Unsupported MAP type" +msgstr "" + +msgid "Unsupported modem" +msgstr "" + msgid "Unsupported protocol type." msgstr "不支援的協定型態" @@ -3555,6 +3670,9 @@ msgstr "確認" msgid "Version" msgstr "版本" +msgid "Virtual dynamic interface" +msgstr "" + msgid "WDS" msgstr "無線分散系統WDS" @@ -3624,8 +3742,11 @@ msgstr "無線預覽" msgid "Wireless Security" msgstr "無線安全" -msgid "Wireless is disabled or not associated" -msgstr "無線被關閉或者尚未關聯" +msgid "Wireless is disabled" +msgstr "無線被關閉" + +msgid "Wireless is not associated" +msgstr "無線未關聯" msgid "Wireless is restarting..." msgstr "無線重啟中..." @@ -3636,12 +3757,6 @@ msgstr "無線網路已經被關閉" msgid "Wireless network is enabled" msgstr "無線網路已啟用" -msgid "Wireless restarted" -msgstr "無線網路已重啟" - -msgid "Wireless shut down" -msgstr "無線網路關閉" - msgid "Write received DNS requests to syslog" msgstr "寫入已接收的DNS請求到系統日誌中" @@ -3745,6 +3860,9 @@ msgstr "本地DNS 檔案" msgid "minutes" msgstr "" +msgid "mixed WPA/WPA2" +msgstr "" + msgid "no" msgstr "無" @@ -3820,6 +3938,49 @@ msgstr "是的" msgid "« Back" msgstr "« 倒退" +#~ msgid "%s - %s" +#~ msgstr "%s - %s" + +#~ msgid "Activate this network" +#~ msgstr "啟用此網路" + +#~ msgid "Hermes 802.11b Wireless Controller" +#~ msgstr "Hermes 802.11b 無線網路控制器" + +#~ msgid "Interface is shutting down..." +#~ msgstr "介面正在關閉中..." + +#~ msgid "Interface reconnected" +#~ msgstr "介面已重連" + +#~ msgid "Interface shut down" +#~ msgstr "介面關閉" + +#~ msgid "Prism2/2.5/3 802.11b Wireless Controller" +#~ msgstr "Prism2/2.5/3 802.11b 無線控制器" + +#~ msgid "RaLink 802.11%s Wireless Controller" +#~ msgstr "RaLink 802.11%s 無線控制器" + +#~ msgid "" +#~ "Really shutdown interface \"%s\"? You might lose access to this device if " +#~ "you are connected via this interface." +#~ msgstr "" +#~ "真的要關閉這個介面 \"%s\" ?!\n" +#~ "假如您要透過這個介面連線您可能會無法存取這個設備." + +#~ msgid "Reconnecting interface" +#~ msgstr "重連這個介面中" + +#~ msgid "Shutdown this network" +#~ msgstr "關閉這個網路" + +#~ msgid "Wireless restarted" +#~ msgstr "無線網路已重啟" + +#~ msgid "Wireless shut down" +#~ msgstr "無線網路關閉" + #~ msgid "DHCP Leases" #~ msgstr "DHCP的釋放週期" diff --git a/luci-base/root/etc/config/ucitrack b/luci-base/root/etc/config/ucitrack index 1d4d110f2..e63986630 100644 --- a/luci-base/root/etc/config/ucitrack +++ b/luci-base/root/etc/config/ucitrack @@ -29,7 +29,7 @@ config httpd option init httpd config fstab - option init fstab + option exec '/sbin/block mount' config qos option init qos diff --git a/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg b/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg index 4f9148833..5a121b85c 100644 --- a/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg +++ b/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg @@ -2,15 +2,15 @@ - - - - - - - - - + + + + + + + + + diff --git a/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg b/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg index 816f7e6a7..5794e7942 100644 --- a/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg +++ b/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg @@ -2,16 +2,16 @@ - - - - - - - - - + + + + + + + + + diff --git a/luci-mod-admin-full/htdocs/luci-static/resources/load.svg b/luci-mod-admin-full/htdocs/luci-static/resources/load.svg index d6817027a..716d37617 100644 --- a/luci-mod-admin-full/htdocs/luci-static/resources/load.svg +++ b/luci-mod-admin-full/htdocs/luci-static/resources/load.svg @@ -2,16 +2,16 @@ - - - - - - - - - + + + + + + + + + diff --git a/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg b/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg index d3e848b93..e75ea614c 100644 --- a/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg +++ b/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg @@ -2,14 +2,14 @@ + + - + - + - - - + diff --git a/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg b/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg index 99d9840f6..00cc2a12f 100644 --- a/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg +++ b/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg @@ -2,15 +2,15 @@ - - - - - - - - - + + + + + + + + + diff --git a/luci-mod-admin-full/luasrc/controller/admin/network.lua b/luci-mod-admin-full/luasrc/controller/admin/network.lua index 80b85b7e1..aef67a364 100644 --- a/luci-mod-admin-full/luasrc/controller/admin/network.lua +++ b/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth --- Copyright 2011-2015 Jo-Philipp Wich +-- Copyright 2011-2018 Jo-Philipp Wich -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.network", package.seeall) @@ -45,26 +45,26 @@ function index() if has_wifi then page = entry({"admin", "network", "wireless_assoclist"}, call("wifi_assoclist"), nil) page.leaf = true - + page = entry({"admin", "network", "wireless_join"}, post("wifi_join"), nil) page.leaf = true page = entry({"admin", "network", "wireless_add"}, post("wifi_add"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_delete"}, post("wifi_delete"), nil) - page.leaf = true - page = entry({"admin", "network", "wireless_status"}, call("wifi_status"), nil) page.leaf = true page = entry({"admin", "network", "wireless_reconnect"}, post("wifi_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_shutdown"}, post("wifi_shutdown"), nil) + page = entry({"admin", "network", "wireless_scan_trigger"}, post("wifi_scan_trigger"), nil) page.leaf = true - page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wireless"), 15) + page = entry({"admin", "network", "wireless_scan_results"}, call("wifi_scan_results"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless"}, arcombine(cbi("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wireless"), 15) page.leaf = true page.subindex = true @@ -88,18 +88,12 @@ function index() page = entry({"admin", "network", "iface_add"}, form("admin_network/iface_add"), nil) page.leaf = true - page = entry({"admin", "network", "iface_delete"}, post("iface_delete"), nil) - page.leaf = true - page = entry({"admin", "network", "iface_status"}, call("iface_status"), nil) page.leaf = true page = entry({"admin", "network", "iface_reconnect"}, post("iface_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "iface_shutdown"}, post("iface_shutdown"), nil) - page.leaf = true - page = entry({"admin", "network", "network"}, arcombine(cbi("admin_network/network"), cbi("admin_network/ifaces")), _("Interfaces"), 10) page.leaf = true page.subindex = true @@ -156,9 +150,6 @@ function index() page = entry({"admin", "network", "diag_traceroute6"}, post("diag_traceroute6"), nil) page.leaf = true - page = entry({"admin", "network", "diag_iperf3"}, post("diag_iperf3"), nil) - page.leaf = true - page = entry({"admin", "network", "diag_speedtest"}, post("diag_speedtest"), nil) page.leaf = true @@ -213,29 +204,6 @@ function wifi_add() end end -function wifi_delete(network) - local ntm = require "luci.model.network".init() - local wnet = ntm:get_wifinet(network) - if wnet then - local dev = wnet:get_device() - local nets = wnet:get_networks() - if dev then - ntm:del_wifinet(network) - ntm:commit("wireless") - local _, net - for _, net in ipairs(nets) do - if net:is_empty() then - ntm:del_network(net:name()) - ntm:commit("network") - end - end - luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>/dev/null") - end - end - - luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) -end - function iface_status(ifaces) local netm = require "luci.model.network".init() local rv = { } @@ -247,6 +215,7 @@ function iface_status(ifaces) if device then local data = { id = iface, + desc = net:get_i18n(), proto = net:proto(), uptime = net:uptime(), gwaddr = net:gwaddr(), @@ -254,11 +223,15 @@ function iface_status(ifaces) ip6addrs = net:ip6addrs(), dnsaddrs = net:dnsaddrs(), ip6prefix = net:ip6prefix(), + errors = net:errors(), name = device:shortname(), type = device:type(), + typename = device:get_type_i18n(), ifname = device:name(), macaddr = device:mac(), - is_up = device:is_up(), + is_up = net:is_up() and device:is_up(), + is_alias = net:is_alias(), + is_dynamic = net:is_dynamic(), rx_bytes = device:rx_bytes(), tx_bytes = device:tx_bytes(), rx_packets = device:rx_packets(), @@ -271,6 +244,7 @@ function iface_status(ifaces) data.subdevices[#data.subdevices+1] = { name = device:shortname(), type = device:type(), + typename = device:get_type_i18n(), ifname = device:name(), macaddr = device:mac(), is_up = device:is_up(), @@ -313,34 +287,6 @@ function iface_reconnect(iface) luci.http.status(404, "No such interface") end -function iface_shutdown(iface) - local netmd = require "luci.model.network".init() - local net = netmd:get_network(iface) - if net then - luci.sys.call("env -i /sbin/ifdown %s >/dev/null 2>/dev/null" - % luci.util.shellquote(iface)) - luci.http.status(200, "Shutdown") - return - end - - luci.http.status(404, "No such interface") -end - -function iface_delete(iface) - local netmd = require "luci.model.network".init() - local net = netmd:del_network(iface) - if net then - luci.sys.call("env -i /sbin/ifdown %s >/dev/null 2>/dev/null" - % luci.util.shellquote(iface)) - luci.http.redirect(luci.dispatcher.build_url("admin/network/network")) - netmd:commit("network") - netmd:commit("wireless") - return - end - - luci.http.status(404, "No such interface") -end - function wifi_status(devs) local s = require "luci.tools.status" local rv = { } @@ -361,39 +307,95 @@ function wifi_status(devs) luci.http.status(404, "No such device") end -local function wifi_reconnect_shutdown(shutdown, wnet) - local netmd = require "luci.model.network".init() - local net = netmd:get_wifinet(wnet) - local dev = net:get_device() - if dev and net then - dev:set("disabled", nil) - net:set("disabled", shutdown and 1 or nil) - netmd:commit("wireless") +function wifi_reconnect(radio) + local rc = luci.sys.call("env -i /sbin/wifi up %s" % luci.util.shellquote(radio)) - luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>/dev/null") - luci.http.status(200, shutdown and "Shutdown" or "Reconnected") - - return + if rc == 0 then + luci.http.status(200, "Reconnected") + else + luci.http.status(500, "Error") end - - luci.http.status(404, "No such radio") -end - -function wifi_reconnect(wnet) - wifi_reconnect_shutdown(false, wnet) -end - -function wifi_shutdown(wnet) - wifi_reconnect_shutdown(true, wnet) end function wifi_assoclist() local s = require "luci.tools.status" - + luci.http.prepare_content("application/json") luci.http.write_json(s.wifi_assoclist()) end + +local function _wifi_get_scan_results(cache_key) + local results = luci.util.ubus("session", "get", { + ubus_rpc_session = luci.model.uci:get_session_id(), + keys = { cache_key } + }) + + if type(results) == "table" and + type(results.values) == "table" and + type(results.values[cache_key]) == "table" + then + return results.values[cache_key] + end + + return { } +end + +function wifi_scan_trigger(radio, update) + local iw = radio and luci.sys.wifi.getiwinfo(radio) + + if not iw then + luci.http.status(404, "No such radio device") + return + end + + luci.http.status(200, "Scan scheduled") + + if nixio.fork() == 0 then + io.stderr:close() + io.stdout:close() + + local _, bss + local data, bssids = { }, { } + local cache_key = "scan_%s" % radio + + luci.util.ubus("session", "set", { + ubus_rpc_session = luci.model.uci:get_session_id(), + values = { [cache_key] = nil } + }) + + for _, bss in ipairs(iw.scanlist or { }) do + data[_] = bss + bssids[bss.bssid] = bss + end + + if update then + for _, bss in ipairs(_wifi_get_scan_results(cache_key)) do + if not bssids[bss.bssid] then + bss.stale = true + data[#data + 1] = bss + end + end + end + + luci.util.ubus("session", "set", { + ubus_rpc_session = luci.model.uci:get_session_id(), + values = { [cache_key] = data } + }) + end +end + +function wifi_scan_results(radio) + local results = radio and _wifi_get_scan_results("scan_%s" % radio) + + if results and #results > 0 then + luci.http.prepare_content("application/json") + luci.http.write_json(results) + else + luci.http.status(404, "No wireless scan results") + end +end + function lease_status() local s = require "luci.tools.status" @@ -454,10 +456,6 @@ function diag_traceroute6(addr) diag_command("traceroute6 -q 1 -w 2 -n %s 2>&1", addr) end -function diag_iperf3(addr) - diag_command("iperf3 -c %q 2>&1", addr) -end - function diag_getip(addr) diag_command("curl %q", addr) end diff --git a/luci-mod-admin-full/luasrc/controller/admin/status.lua b/luci-mod-admin-full/luasrc/controller/admin/status.lua index 4471fd597..ff95f3d91 100644 --- a/luci-mod-admin-full/luasrc/controller/admin/status.lua +++ b/luci-mod-admin-full/luasrc/controller/admin/status.lua @@ -122,12 +122,12 @@ function action_connections() luci.http.prepare_content("application/json") - luci.http.write("{ connections: ") + luci.http.write('{ "connections": ') luci.http.write_json(sys.net.conntrack()) local bwc = io.popen("luci-bwc -c 2>/dev/null") if bwc then - luci.http.write(", statistics: [") + luci.http.write(', "statistics": [') while true do local ln = bwc:read("*l") diff --git a/luci-mod-admin-full/luasrc/controller/admin/system.lua b/luci-mod-admin-full/luasrc/controller/admin/system.lua index 0c19893cf..153615b58 100644 --- a/luci-mod-admin-full/luasrc/controller/admin/system.lua +++ b/luci-mod-admin-full/luasrc/controller/admin/system.lua @@ -341,9 +341,17 @@ function action_restore() local upload = http.formvalue("archive") if upload and #upload > 0 then - luci.template.render("admin_system/applyreboot") - os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) - luci.sys.reboot() + if os.execute("gunzip -t %q >/dev/null 2>&1" % archive_tmp) == 0 then + luci.template.render("admin_system/applyreboot") + os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) + luci.sys.reboot() + else + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade(), + backup_invalid = true + }) + end return end diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua index 58bc966b2..934806ba0 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -122,6 +122,9 @@ s:taboption("advanced", Flag, "strictorder", translate("DNS servers will be queried in the " .. "order of the resolvfile")).optional = true +s:taboption("advanced", Flag, "allservers", + translate("All Servers"), + translate("Query all available upstream DNS servers")).optional = true bn = s:taboption("advanced", DynamicList, "bogusnxdomain", translate("Bogus NX Domain Override"), translate("List of hosts that supply bogus NX domain results")) diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua index 4730368f9..8593b52c7 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua @@ -10,6 +10,10 @@ m = SimpleForm("network", translate("Create Interface")) m.redirect = luci.dispatcher.build_url("admin/network/network") m.reset = false +function m.on_cancel() + luci.http.redirect(luci.dispatcher.build_url("admin/network/network")) +end + newnet = m:field(Value, "_netname", translate("Name of the new interface"), translate("The allowed characters are: A-Z, a-z, " .. "0-9 and _" diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 90647b7a3..4f267f695 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -315,6 +315,7 @@ if not net:is_floating() then ifname_single.template = "cbi/network_ifacelist" ifname_single.widget = "radio" ifname_single.nobridges = true + ifname_single.noaliases = false ifname_single.rmempty = false ifname_single.network = arg[1] ifname_single:depends("type", "") @@ -325,12 +326,18 @@ if not net:is_floating() then end function ifname_single.write(self, s, val) - local i + local _, i local new_ifs = { } local old_ifs = { } - for _, i in ipairs(net:get_interfaces() or { net:get_interface() }) do - old_ifs[#old_ifs+1] = i:name() + local alias = net:is_alias() + + if alias then + old_ifs[1] = '@' .. alias + else + for _, i in ipairs(net:get_interfaces() or { net:get_interface() }) do + old_ifs[#old_ifs+1] = i:name() + end end for i in ut.imatch(val) do @@ -365,6 +372,7 @@ if not net:is_virtual() then ifname_multi = s:taboption("physical", Value, "ifname_multi", translate("Interface")) ifname_multi.template = "cbi/network_ifacelist" ifname_multi.nobridges = true + ifname_multi.noaliases = true ifname_multi.rmempty = false ifname_multi.network = arg[1] ifname_multi.widget = "checkbox" diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua index c9d1dc4b2..96cde2513 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua @@ -3,12 +3,147 @@ -- Licensed to the public under the Apache License 2.0. local fs = require "nixio.fs" +local tpl = require "luci.template" +local ntm = require "luci.model.network".init() +local fwm = require "luci.model.firewall".init() local json = require "luci.jsonc" local sys = require "luci.sys" m = Map("network", translate("Interfaces")) +m:chain("wireless") +m:chain("firewall") +m:chain("dhcp") m.pageaction = false -m:section(SimpleSection).template = "admin_network/iface_overview" + + +local tpl_networks = tpl.Template(nil, [[ +
      +
      + <% + for i, net in ipairs(netlist) do + local z = net[3] + local c = z and z:get_color() or "#EEEEEE" + local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned") + local disabled = (net[4]:get("auto") == "0") + local dynamic = net[4]:is_dynamic() + %> +
      +
      +
      +
      + <%=net[1]:upper()%> +
      +
      +
      + ? +
      +
      +
      +
      + <%:Collecting data...%> +
      +
      +
      + /> + + <% if disabled then %> + + /> + <% else %> + + /> + <% end %> + + '" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit"<%=ifattr(dynamic, "disabled", "disabled")%> /> + + + /> +
      +
      +
      + <% end %> +
      +
      +
      + '" /> +
      +]]) + +local _, net +local ifaces, netlist = { }, { } + +for _, net in ipairs(ntm:get_networks()) do + if net:name() ~= "loopback" then + local zn = net:zonename() + local z = zn and fwm:get_zone(zn) or fwm:get_zone_by_network(net:name()) + + local w = 1 + if net:is_alias() then + w = 2 + elseif net:is_dynamic() then + w = 3 + end + + ifaces[#ifaces+1] = net:name() + netlist[#netlist+1] = { + net:name(), z and z:name() or "-", z, net, w + } + end +end + +table.sort(netlist, + function(a, b) + if a[2] ~= b[2] then + return a[2] < b[2] + elseif a[5] ~= b[5] then + return a[5] < b[5] + else + return a[1] < b[1] + end + end) + +s = m:section(TypedSection, "interface", translate("Interface Overview")) + +function s.sections(self) + local _, net, sl = nil, nil, { } + + for _, net in ipairs(netlist) do + sl[#sl+1] = net[1] + end + + return sl +end + +function s.render(self) + tpl_networks:render({ + netlist = netlist + }) +end + +o = s:option(Value, "__disable__") + +function o.cfgvalue(self, sid) + return (m:get(sid, "auto") == "0") and "1" or "0" +end + +function o.write(self, sid, value) + if value ~= "1" then + m:set(sid, "auto", "") + else + m:set(sid, "auto", "0") + end +end + +o.remove = o.write + +o = s:option(Value, "__delete__") + +function o.write(self, sid, value) + ntm:del_network(sid) +end + + +m:section(SimpleSection).template = "admin_network/iface_overview_status" if fs.access("/etc/init.d/dsl_control") then local ok, boarddata = pcall(json.parse, fs.readfile("/etc/board.json")) diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua index d51a72aba..743efaa1e 100644 --- a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -16,7 +16,7 @@ local acct_port, acct_secret, acct_server, anonymous_identity, ant1, ant2, mp, nasid, network, password, pmk_r1_push, privkey, privkey2, privkeypwd, privkeypwd2, r0_key_lifetime, r0kh, r1_key_holder, r1kh, reassociation_deadline, retry_timeout, ssid, st, tp, wepkey, wepslot, - wmm, wpakey, wps + wmm, wpakey, wps, disassoc_low_ack, short_preamble, beacon_int, dtim_period arg[1] = arg[1] or "" @@ -250,6 +250,14 @@ if hwtype == "mac80211" then s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold")) s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold")) + + s:taboption("advanced", Flag, "noscan", translate("Force 40MHz mode"), + translate("Always use 40MHz channels even if the secondary channel overlaps. Using this option does not comply with IEEE 802.11n-2009!")).optional = true + + beacon_int = s:taboption("advanced", Value, "beacon_int", translate("Beacon Interval")) + beacon_int.optional = true + beacon_int.placeholder = 100 + beacon_int.datatype = "range(15,65535)" end @@ -491,6 +499,18 @@ if hwtype == "mac80211" then ifname = s:taboption("advanced", Value, "ifname", translate("Interface name"), translate("Override default interface name")) ifname.optional = true + + short_preamble = s:taboption("advanced", Flag, "short_preamble", translate("Short Preamble")) + short_preamble.default = short_preamble.enabled + + dtim_period = s:taboption("advanced", Value, "dtim_period", translate("DTIM Interval"), translate("Delivery Traffic Indication Message Interval")) + dtim_period.optional = true + dtim_period.placeholder = 2 + dtim_period.datatype = "range(1,255)" + + disassoc_low_ack = s:taboption("advanced", Flag, "disassoc_low_ack", translate("Disassociate On Low Acknowledgement"), + translate("Allow AP mode to disconnect STAs based on low ACK condition")) + disassoc_low_ack.default = disassoc_low_ack.enabled end diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_overview.lua b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_overview.lua new file mode 100644 index 000000000..32bf1965f --- /dev/null +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_overview.lua @@ -0,0 +1,223 @@ +-- Copyright 2018 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local utl = require "luci.util" +local tpl = require "luci.template" +local ntm = require "luci.model.network" + +local has_iwinfo = pcall(require, "iwinfo") + +function guess_wifi_hw(dev) + local bands = "" + local ifname = dev:name() + local name, idx = ifname:match("^([a-z]+)(%d+)") + idx = tonumber(idx) + + if has_iwinfo then + local bl = dev.iwinfo.hwmodelist + if bl and next(bl) then + if bl.a then bands = bands .. "a" end + if bl.b then bands = bands .. "b" end + if bl.g then bands = bands .. "g" end + if bl.n then bands = bands .. "n" end + if bl.ac then bands = bands .. "ac" end + end + + local hw = dev.iwinfo.hardware_name + if hw then + return "%s 802.11%s" %{ hw, bands } + end + end + + -- wl.o + if name == "wl" then + local name = translatef("Broadcom 802.11%s Wireless Controller", bands) + local nm = 0 + + local fd = nixio.open("/proc/bus/pci/devices", "r") + if fd then + local ln + for ln in fd:linesource() do + if ln:match("wl$") then + if nm == idx then + local version = ln:match("^%S+%s+%S%S%S%S([0-9a-f]+)") + name = translatef( + "Broadcom BCM%04x 802.11 Wireless Controller", + tonumber(version, 16) + ) + + break + else + nm = nm + 1 + end + end + end + fd:close() + end + + return name + + -- dunno yet + else + return translatef("Generic 802.11%s Wireless Controller", bands) + end +end + +local tpl_radio = tpl.Template(nil, [[ +
      +
      + +
      +
      + <%=dev:name()%> +
      +
      + <%=hw%>
      + +
      +
      +
      + + + +
      +
      +
      + + + + <% if #wnets > 0 then %> + <% for i, net in ipairs(wnets) do local disabled = (dev:get("disabled") == "1" or net:get("disabled") == "1") %> +
      +
      + .png" /> 0% +
      +
      "> + <%= disabled and translate("Wireless is disabled") or translate("Collecting data...") %> +
      +
      +
      + <% if disabled then %> + + + <% else %> + + + <% end %> + + + + + +
      +
      +
      + <% end %> + <% else %> +
      +
      + <%:No network configured on this device%> +
      +
      + <% end %> + +
      +
      +]]) + + +m = Map("wireless", translate("Wireless Overview")) +m:chain("network") +m.pageaction = false + +if not has_iwinfo then + s = m:section(NamedSection, "__warning__") + + function s.render(self) + tpl.render_string([[ +
      +

      <%:Package libiwinfo required!%>

      +

      <%_The libiwinfo-lua package is not installed. You must install this component for working wireless configuration!%>

      +
      + ]]) + end +end + +local _, dev, net +for _, dev in ipairs(ntm:get_wifidevs()) do + s = m:section(TypedSection) + s.wnets = dev:get_wifinets() + + function s.render(self, sid) + tpl_radio:render({ + hw = guess_wifi_hw(dev), + dev = dev, + wnets = self.wnets + }) + end + + function s.cfgsections(self) + local _, net, sl = nil, nil, { } + for _, net in ipairs(self.wnets) do + sl[#sl+1] = net:name() + self.wnets[net:name()] = net + end + return sl + end + + o = s:option(Value, "__disable__") + + function o.cfgvalue(self, sid) + local wnet = self.section.wnets[sid] + local wdev = wnet:get_device() + + return ((wnet and wnet:get("disabled") == "1") or + (wdev and wdev:get("disabled") == "1")) and "1" or "0" + end + + function o.write(self, sid, value) + local wnet = self.section.wnets[sid] + local wdev = wnet:get_device() + + if value ~= "1" then + wnet:set("disabled", nil) + wdev:set("disabled", nil) + else + wnet:set("disabled", "1") + end + end + + o.remove = o.write + + + o = s:option(Value, "__delete__") + + function o.write(self, sid, value) + local wnet = self.section.wnets[sid] + local nets = wnet:get_networks() + + ntm:del_wifinet(wnet:id()) + + local _, net + for _, net in ipairs(nets) do + if net:is_empty() then + ntm:del_network(net:name()) + end + end + end +end + +s = m:section(NamedSection, "__script__") +s.template = "admin_network/wifi_overview_status" + +s = m:section(NamedSection, "__assoclist__") + +function s.render(self, sid) + tpl.render_string([[ +

      <%:Associated Stations%>

      + <%+admin_network/wifi_assoclist%> + ]]) +end + +return m diff --git a/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm b/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm index 41571fe50..4ab206e81 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm @@ -8,20 +8,17 @@ <% local fs = require "nixio.fs" local has_ping6 = fs.access("/bin/ping6") or fs.access("/usr/bin/ping6") -local has_traceroute6 = fs.access("/usr/bin/traceroute6") +local has_traceroute6 = fs.access("/bin/traceroute6") or fs.access("/usr/bin/traceroute6") local has_speedtest = fs.access("/usr/sbin/speedtestc") -local has_iperf3 = fs.access("/usr/bin/iperf3") local has_curl = fs.access("/usr/bin/curl") local has_netstat = fs.access("/bin/netstat") local dns_host = luci.config.diag and luci.config.diag.dns or "dev.openwrt.org" local ping_host = luci.config.diag and luci.config.diag.ping or "dev.openwrt.org" local route_host = luci.config.diag and luci.config.diag.route or "dev.openwrt.org" -local iperf3_host = luci.config.diag and luci.config.diag.iperf3 or "ping-ams1.online.net" local getip_host = luci.config.diag and luci.config.diag.getip or "ifconfig.co" %> - - - - - -
      -
      - <%:Interface Overview%> - -
      -
      - <% - for i, net in ipairs(netlist) do - local z = net[3] - local c = z and z:get_color() or "#EEEEEE" - local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned") - %> -
      -
      -
      -
      - <%=net[1]:upper()%> -
      -
      -
      - ? -
      -
      -
      -
      - <%:Collecting data...%> -
      -
      - - - '" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> - -
      -
      - <% end %> -
      -
      - - '" /> -
      -
      diff --git a/luci-mod-admin-full/luasrc/view/admin_network/iface_overview_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/iface_overview_status.htm new file mode 100644 index 000000000..2c89d1043 --- /dev/null +++ b/luci-mod-admin-full/luasrc/view/admin_network/iface_overview_status.htm @@ -0,0 +1,183 @@ +<%# + Copyright 2010-2018 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + + diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index 9b93942c8..987123642 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -8,56 +8,6 @@ local sys = require "luci.sys" local utl = require "luci.util" - function guess_wifi_signal(info) - local scale = (100 / (info.quality_max or 100) * (info.quality or 0)) - local icon - - if not info.bssid or info.bssid == "00:00:00:00:00:00" then - icon = resource .. "/icons/signal-none.png" - elseif scale < 15 then - icon = resource .. "/icons/signal-0.png" - elseif scale < 35 then - icon = resource .. "/icons/signal-0-25.png" - elseif scale < 55 then - icon = resource .. "/icons/signal-25-50.png" - elseif scale < 75 then - icon = resource .. "/icons/signal-50-75.png" - else - icon = resource .. "/icons/signal-75-100.png" - end - - return icon - end - - function percent_wifi_signal(info) - local qc = info.quality or 0 - local qm = info.quality_max or 0 - - if info.bssid and qc > 0 and qm > 0 then - return math.floor((100 / qm) * qc) - else - return 0 - end - end - - function format_wifi_encryption(info) - if info.wep == true then - return "WEP" - elseif info.wpa > 0 then - return translatef("%s - %s", - table.concat(info.pair_ciphers, ", "), - table.concat(info.group_ciphers, ", "), - (info.wpa == 3) and translate("mixed WPA/WPA2") - or (info.wpa == 2 and "WPA2" or "WPA"), - table.concat(info.auth_suites, ", ") - ) - elseif info.enabled then - return "%s" % translate("unknown") - else - return "%s" % translate("open") - end - end - local dev = luci.http.formvalue("device") local iw = luci.sys.wifi.getiwinfo(dev) @@ -65,91 +15,198 @@ luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) return end - - - function scanlist(times) - local i, k, v - local l = { } - local s = { } - - for i = 1, times do - for k, v in ipairs(iw.scanlist or { }) do - if not s[v.bssid] then - l[#l+1] = v - s[v.bssid] = true - end - end - end - - return l - end -%> <%+header%> + +

      <%:Join Network: Wireless Scan%>

      -
      +
      -
      <%:Signal%>
      -
      <%:SSID%>
      -
      <%:Channel%>
      -
      <%:Mode%>
      -
      <%:BSSID%>
      -
      <%:Encryption%>
      +
      <%:Signal%>
      +
      <%:SSID%>
      +
      <%:Channel%>
      +
      <%:Mode%>
      +
      <%:BSSID%>
      +
      <%:Encryption%>
       
      - - <% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %> -
      -
      - -
      - <%=percent_wifi_signal(net)%>% -
      -
      -
      - <%=net.ssid and utl.pcdata(net.ssid) or "%s" % translate("hidden")%> -
      -
      - <%=net.channel%> -
      -
      - <%=net.mode%> -
      -
      - <%=net.bssid%> -
      -
      - <%=format_wifi_encryption(net.encryption)%> -
      -
      -
      - - - - - - - - <% if net.encryption.wpa then %> - - <% for _, v in ipairs(net.encryption.auth_suites) do %> - <% end; for _, v in ipairs(net.encryption.group_ciphers) do %> - <% end; for _, v in ipairs(net.encryption.pair_ciphers) do %> - <% end; end %> - - " /> - - -
      +
      +
      + + <%:Collecting data...%>
      - <% end %> -
      @@ -160,7 +217,7 @@
      - +
      diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm deleted file mode 100644 index b9602785f..000000000 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ /dev/null @@ -1,354 +0,0 @@ -<%# - Copyright 2008-2009 Steven Barth - Copyright 2008-2015 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<%- - - local ip = require "luci.ip" - local fs = require "nixio.fs" - local utl = require "luci.util" - local uci = require "luci.model.uci".cursor() - local ntm = require "luci.model.network" - - local has_iwinfo = pcall(require, "iwinfo") - - ntm.init(uci) - - function guess_wifi_hw(dev) - local bands = "" - local ifname = dev:name() - local name, idx = ifname:match("^([a-z]+)(%d+)") - idx = tonumber(idx) - - if has_iwinfo then - local bl = dev.iwinfo.hwmodelist - if bl and next(bl) then - if bl.a then bands = bands .. "a" end - if bl.b then bands = bands .. "b" end - if bl.g then bands = bands .. "g" end - if bl.n then bands = bands .. "n" end - if bl.ac then bands = bands .. "ac" end - end - - local hw = dev.iwinfo.hardware_name - if hw then - return "%s 802.11%s" %{ hw, bands } - end - end - - -- wl.o - if name == "wl" then - local name = translatef("Broadcom 802.11%s Wireless Controller", bands) - local nm = 0 - - local fd = nixio.open("/proc/bus/pci/devices", "r") - if fd then - local ln - for ln in fd:linesource() do - if ln:match("wl$") then - if nm == idx then - local version = ln:match("^%S+%s+%S%S%S%S([0-9a-f]+)") - name = translatef( - "Broadcom BCM%04x 802.11 Wireless Controller", - tonumber(version, 16) - ) - - break - else - nm = nm + 1 - end - end - end - fd:close() - end - - return name - - -- ralink - elseif name == "ra" then - return translatef("RaLink 802.11%s Wireless Controller", bands) - - -- hermes - elseif name == "eth" then - return translate("Hermes 802.11b Wireless Controller") - - -- hostap - elseif name == "wlan" and fs.stat("/proc/net/hostap/" .. ifname, "type") == "dir" then - return translate("Prism2/2.5/3 802.11b Wireless Controller") - - -- dunno yet - else - return translatef("Generic 802.11%s Wireless Controller", bands) - end - end - - local devices = ntm:get_wifidevs() - local netlist = { } - local netdevs = { } - - local dev - for _, dev in ipairs(devices) do - local net - for _, net in ipairs(dev:get_wifinets()) do - netlist[#netlist+1] = net:id() - netdevs[net:id()] = dev:name() - end - end --%> - -<%+header%> - -<% if not has_iwinfo then %> -
      -

      <%:Package libiwinfo required!%>

      -

      <%_The libiwinfo-lua package is not installed. You must install this component for working wireless configuration!%>

      -
      -<% end %> - - - - -

      <%:Wireless Overview%>

      - - - -
      - - <% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %> - -
      -
      - -
      -
      - <%=dev:name()%> -
      -
      - <%=guess_wifi_hw(dev)%>
      - -
      -
      -
      - - - -
      -
      - - - -
      -
      -
      - - - - <% if #nets > 0 then %> - <% for i, net in ipairs(nets) do %> -
      -
      - 0% -
      -
      - <%:Collecting data...%> -
      -
      - - - -
      -
      - <% end %> - <% else %> -
      -
      - <%:No network configured on this device%> -
      -
      - <% end %> - -
      -
      - - <% end %> - - -

      <%:Associated Stations%>

      - - <%+admin_network/wifi_assoclist%> -
      - -<%+footer%> diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview_status.htm new file mode 100644 index 000000000..9730bc2c9 --- /dev/null +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview_status.htm @@ -0,0 +1,127 @@ +<%# + Copyright 2008-2009 Steven Barth + Copyright 2008-2018 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + + diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index ad20ea38f..bfad3d080 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -8,7 +8,7 @@ { var is_assoc = (iw.bssid && iw.bssid != '00:00:00:00:00:00' && iw.channel && !iw.disabled); var p = iw.quality; - var q = is_assoc ? p : -1; + var q = iw.disabled ? -1 : p; var icon; if (q < 0) @@ -55,8 +55,10 @@ info.innerHTML = String.format( '<%:SSID%>: %h | ' + '<%:Mode%>: %s
      ' + - '<%:Wireless is disabled or not associated%>', - iw.ssid || '?', iw.mode + '%s', + iw.ssid || '?', iw.mode, + iw.disabled ? '<%:Wireless is disabled%>' + : '<%:Wireless is not associated%>' ); } } diff --git a/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index ba0ab0f68..3bb55f905 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -19,7 +19,6 @@ <%+header%> - <% end -%> + From 9181796fcdb8ae606e3aa5b9311797187cacc5c4 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 23 Jul 2018 22:31:43 +0200 Subject: [PATCH 254/307] Fix --- mptcp/files/etc/init.d/mptcp | 2 +- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 2 +- omr-tracker/files/bin/omr-tracker | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 3030b3777..9dda80bbb 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -73,7 +73,7 @@ interface_multipath_settings() { [ -z "$gateway" ] && gateway=$(uci -q get "network.$config.gateway") [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") - [ -z "$gateway" ] && gateway=$(ubus call network.interface.${config}_4 status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") + [ -z "$gateway" ] && gateway=$(ubus call network.interface.${config}_4 status 2>/dev/null | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") netmask=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f2 | tr -d "\n") network=`ipcalc.sh $ipaddr $netmask | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` fi diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 9f0ad400d..36e2999c3 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -8,7 +8,7 @@ set_route() { multipath_config=$(uci -q get network.$INTERFACE.multipath || echo "off") interface_if=$(uci -q get network.$INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') multipath_current_config=$(multipath $interface_if | grep deactivated) if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then #if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index a4798809e..c5a19ec79 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -158,7 +158,7 @@ while true; do OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.${OMR_TRACKER_INTERFACE}_4 status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.${OMR_TRACKER_INTERFACE}_4 status 2>/dev/null | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi # execute specific tracker From 955b027cb48fa587858e48b005dbb6ad8abce566 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 10:34:11 +0200 Subject: [PATCH 255/307] Modify default QoS values --- openmptcprouter/files/etc/uci-defaults/1960-omr-qos | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1960-omr-qos b/openmptcprouter/files/etc/uci-defaults/1960-omr-qos index a93fc17fd..a98fc705b 100755 --- a/openmptcprouter/files/etc/uci-defaults/1960-omr-qos +++ b/openmptcprouter/files/etc/uci-defaults/1960-omr-qos @@ -6,13 +6,13 @@ if [ "$(uci -q get qos.wan1)" = "" ]; then set qos.wan1=interface set qos.wan1.classgroup="Default" set qos.wan1.enabled="0" - set qos.wan1.upload="256" - set qos.wan1.download="2048" + set qos.wan1.upload="4000" + set qos.wan1.download="100000" set qos.wan2=interface set qos.wan2.classgroup="Default" set qos.wan2.enabled="0" - set qos.wan2.upload="256" - set qos.wan2.download="2048" + set qos.wan2.upload="4000" + set qos.wan2.download="100000" delete qos.@classify[-1] add qos classify set qos.@classify[-1].target='Express' From b482cd1dbd059230e6a2d6b9567f05c4ce6af067 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 14:26:04 +0200 Subject: [PATCH 256/307] Add server route for all wans --- .../share/omr/post-tracking.d/post-tracking | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 36e2999c3..793e79b34 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -35,22 +35,22 @@ set_route() { set_ss_route() { local server_ip upstreams nginxip - local metric $2 + local metric=$2 [ -z "$metric" ] && metric=1 config_get server_ip $1 server if [ "$server_ip" = "127.0.0.1" ]; then upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') for up in $upstreams; do - _log "up : $up" + _log "up: $up - metric: $metric" nginxip=$(echo $up | cut -d: -f1) - if [ "$nginxip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $nginxip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + if [ "$nginxip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then _log "Set server $nginxip route via $OMR_TRACKER_DEVICE" ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric fi done else - if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then - _log "Set server $server_ip route via $OMR_TRACKER_DEVICE" + if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + _log "Set server $server_ip route via $OMR_TRACKER_DEVICE metric $metric" ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric fi fi @@ -58,7 +58,7 @@ set_ss_route() { del_ss_route() { local server_ip upstreams nginxip - local metric $2 + local metric=$2 [ -z "$metric" ] && metric=1 config_get server_ip $1 server if [ "$server_ip" = "127.0.0.1" ]; then @@ -66,13 +66,13 @@ del_ss_route() { for up in $upstreams; do _log "down : $up" nginxip=$(echo $up | cut -d: -f1) - if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $nginxip)" != "" ]; then + if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip)" != "" ]; then _log "Remove server $nginxip route via $OMR_TRACKER_DEVICE" ip route delete $nginxip dev $OMR_TRACKER_DEVICE metric $metric fi done else - if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then + if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip)" != "" ]; then _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric $metric fi @@ -151,9 +151,11 @@ if [ "$multipath_config" = "master" ]; then fi multipath_config="on" else - local metric=$(ip rule show | grep $OMR_TRACKER_DEVICE_GATEWAY | awk '{print $5}') - config_load shadowsocks-libev - config_foreach set_ss_route server $metric + local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}') + [ -n "$metric" ] && { + config_load shadowsocks-libev + config_foreach set_ss_route server $metric + } fi if [ "$(uci -q get omr-bypass.defaults.ifname)" = "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show table 991337 | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 From 0d501819a4a9f81c201ddc72214e7f8cb7c9a2f6 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 14:27:13 +0200 Subject: [PATCH 257/307] Doesn't configure MPTCP if interface down --- mptcp/files/etc/init.d/mptcp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 9dda80bbb..ad891efd9 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -36,6 +36,10 @@ interface_multipath_settings() { local mode iface local config="$1" local intf="$2" + local enabled + + config_get enabled "$config" auto "1" + [ "$enabled" = "0" ] && return 0 config_get iface "$config" ifname [ -z "$iface" ] && iface=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') @@ -87,6 +91,8 @@ interface_multipath_settings() { ip route flush $id config_get mode "$config" multipath "off" + local enabled + config_get enabled "$config" auto "1" [ "$mode" = "master" ] && { ip route replace default via $gateway dev $iface } From f95a9856059590895d374d3f87253e076cb81590 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 14:27:41 +0200 Subject: [PATCH 258/307] Doesn't track interface if interface down --- omr-tracker/files/etc/init.d/omr-tracker | 2 ++ 1 file changed, 2 insertions(+) diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 7cab9e554..80eb27e5c 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -45,9 +45,11 @@ _launch_tracker() { [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') config_get multipath "$1" multipath + config_get ifenabled "$1" auto config_get gateway "$1" gateway [ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && [ "$1" != "omrvpn" ] && return + [ "${ifenabled}" = "0" ] && return [ "${enabled}" = "0" ] && return procd_open_instance From 05c4fe5ad0dbfc92d4cb14aee064b37089ad9746 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 17:07:14 +0200 Subject: [PATCH 259/307] Add whois package --- whois/Makefile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 whois/Makefile diff --git a/whois/Makefile b/whois/Makefile new file mode 100644 index 000000000..4b6526ea0 --- /dev/null +++ b/whois/Makefile @@ -0,0 +1,46 @@ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=whois +PKG_VERSION:=5.3.2 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/w/whois +PKG_HASH:=79714ba89172bca08a2443f59885daa4af0c5f8d6a49bc9e7f2a83559a286354 +PKG_CAT:=xzcat + +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/whois + SECTION:=net + CATEGORY:=Network + TITLE:=WHOIS commandline utility + URL:=http://ftp.debian.org/debian/pool/main/w/whois + MAINTAINER:=Kihamo +endef + +define Package/whois/description + Utility to display information from WHOIS servers +endef + +define Package/whois/conffiles +/etc/whois.conf +endef + +MAKE_FLAGS += \ + prefix=$(PKG_BUILD_DIR) + +define Package/whois/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/whois $(1)/usr/sbin + $(INSTALL_DIR) $(1)/etc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/whois.conf $(1)/etc/whois.conf +endef + +$(eval $(call BuildPackage,whois)) + From c3f51af9a2951763d67279420bad4b7add14f6f7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 17:08:27 +0200 Subject: [PATCH 260/307] More info and checks in status page --- luci-app-openmptcprouter/Makefile | 2 +- .../luasrc/controller/openmptcprouter.lua | 54 +++++++++++++++---- .../luasrc/view/openmptcprouter/wanstatus.htm | 38 ++++++++++++- luci-app-openmptcprouter/root/bin/omr-ip-intf | 5 ++ .../root/bin/omr-mptcp-intf | 11 ++-- 5 files changed, 89 insertions(+), 21 deletions(-) create mode 100755 luci-app-openmptcprouter/root/bin/omr-ip-intf diff --git a/luci-app-openmptcprouter/Makefile b/luci-app-openmptcprouter/Makefile index 26de8e19f..ca286381b 100644 --- a/luci-app-openmptcprouter/Makefile +++ b/luci-app-openmptcprouter/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Support for OpenMPTCProuter -LUCI_DEPENDS:=+luci-lib-json +rdisc6 +curl +LUCI_DEPENDS:=+luci-lib-json +rdisc6 +curl +whois +bind-dig PKG_LICENSE:=GPLv3 include ../luci/luci.mk diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 440ded684..f40bd5901 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -358,13 +358,22 @@ end function get_ip(interface) local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - local ip + local ip = "" if dump and dump['ipv4-address'] then local _, ipv4address for _, ipv4address in ipairs(dump['ipv4-address']) do ip = dump['ipv4-address'][_].address end end + if ip == "" then + local dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) + if dump and dump['ipv4-address'] then + local _, ipv4address + for _, ipv4address in ipairs(dump['ipv4-address']) do + ip = dump['ipv4-address'][_].address + end + end + end return ip end @@ -387,6 +396,19 @@ function get_gateway(interface) end end end + + if gateway == "" then + dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) + + if dump and dump.route then + local _, route + for _, route in ipairs(dump.route) do + if dump.route[_].target == "0.0.0.0" then + gateway = dump.route[_].nexthop + end + end + end + end return gateway end @@ -405,7 +427,7 @@ function interfaces_status() -- OpenMPTCProuter info mArray.openmptcprouter = {} mArray.openmptcprouter["version"] = ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::'")) - -- Check that requester is in same network + mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "proxy", "server") or "0.0.0.0" mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr") @@ -543,6 +565,7 @@ function interfaces_status() local ipaddr = net:ipaddr() local gateway = section['gateway'] or "" local multipath = section['multipath'] + local enabled = section['auto'] --if not ipaddr or not gateway then return end -- Don't show if0 in the overview @@ -555,8 +578,9 @@ function interfaces_status() --if multipath == "off" and not ifname:match("^tun.*") then return end if multipath == "off" then return end + + if enabled == "0" then return end - local asn local connectivity if ifname ~= "" and ifname ~= nil then @@ -588,11 +612,21 @@ function interfaces_status() connectivity = 'WARNING' end end - end - - if gateway == "" then + else connectivity = 'ERROR' end + + local latency = "-" + local server_ping = 'UP' + local server_ping_test = sys.exec("ping -W 1 -c 1 -I " .. ifname .. " " .. mArray.openmptcprouter["wan_addr"]) + local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) + if server_ping_result ~= "" then + server_ping = 'DOWN' + if connectivity == "OK" then + connectivity = 'WARNING' + end + end + local latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f4 | cut -d '.' -f1")) if mArray.openmptcprouter["dns"] == true and ifname ~= nil and gateway ~= "" and gw_ping == "UP" then -- Test if multipath can work on the connection @@ -630,9 +664,8 @@ function interfaces_status() end end - local publicIP = "-" - - local latency = "-" + local publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname)) + local whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'")) local data = { label = section['label'] or interface, @@ -645,11 +678,12 @@ function interfaces_status() status = connectivity, wanip = publicIP, latency = latency, - whois = asn and asn.as_description or "unknown", + whois = whois or "unknown", qos = section['trafficcontrol'], download = section['download'], upload = section['upload'], gw_ping = gw_ping, + server_ping = server_ping, ipv6_discover = ipv6_discover, multipath_available = multipath_available, } diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index e6f9a386e..dd4ecd95b 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -145,6 +145,9 @@ if (mArray.openmptcprouter.tun6_state == "DOWN") { statusMessage += 'VPN IPv6 tunnel DOWN
      '; + } else if (mArray.openmptcprouter.wan_addr6 == '') + { + statusMessage += 'No IPv6 access
      '; } if (statusMessage !== "") { @@ -158,6 +161,7 @@ if (mArray.wans) { temp += '
        '; + var master = 0; for( var i = 0; i < mArray.wans.length; i++ ) { // Get link color @@ -193,9 +197,14 @@ var ipaddr = mArray.wans[i].ipaddr; var whois = mArray.wans[i].whois; var multipath = mArray.wans[i].multipath; + if(multipath == 'master') + { + master++; + } var latency = mArray.wans[i].latency; var gateway = mArray.wans[i].gateway; var gw_ping = mArray.wans[i].gw_ping; + var server_ping = mArray.wans[i].server_ping; var ipv6_discover = mArray.wans[i].ipv6_discover; var multipath_available = mArray.wans[i].multipath_available; // Generate template @@ -210,6 +219,18 @@ var title = mArray.wans[i].label + " (" + mArray.wans[i].gateway + ")"; //var content = String.format('%s
        wan address: %s
        whois: %s
        latency: %s ms
        multipath: %s', stat, wanip, whois, latency, multipath); var content = ""; + if(wanip !== '') + { + content += String.format('wan address: %s
        ', wanip); + } + if(whois !== '') + { + content += String.format('whois: %s
        ', whois); + } + if(latency !== '') + { + content += String.format('latency: %s ms
        ', latency); + } if(ipaddr == '') { statusMessage += 'No IP defined
        ' @@ -224,14 +245,27 @@ { statusMessage += 'Multipath blocked on the connection
        ' } + if(server_ping == 'DOWN') + { + statusMessage += 'Can\'t ping server
        ' + } + if(multipath == 'master' && master > 1) + { + statusMessage += 'Multipath master already defined
        '; + statusMessageClass = "error"; + } if(ipv6_discover == 'DETECTED') { statusMessage += 'IPv6 route received
        ' } - content += String.format('ip address: %s
        multipath: %s', ipaddr,multipath); + if(ipaddr != '') + { + content += String.format('ip address: %s
        ', ipaddr); + } + content += String.format('multipath: %s
        ',multipath); if(mArray.wans[i].qos && mArray.wans[i].download > 0 && mArray.wans[i].upload > 0) { - content += String.format('
        traffic control: %s/%s kbps (%s)', mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos) + content += String.format('traffic control: %s/%s kbps (%s)', mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos) } temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content); diff --git a/luci-app-openmptcprouter/root/bin/omr-ip-intf b/luci-app-openmptcprouter/root/bin/omr-ip-intf new file mode 100755 index 000000000..feb3a9a43 --- /dev/null +++ b/luci-app-openmptcprouter/root/bin/omr-ip-intf @@ -0,0 +1,5 @@ +#!/bin/sh +checkip=$(dig +short A ip.openmptcprouter.com | tr -d "\n") +ipset add ss_rules_dst_bypass $checkip +curl -s -4 -m 3 --interface $1 http://ip.openmptcprouter.com +ipset del ss_rules_dst_bypass $checkip diff --git a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf index 6e8e020ef..ac24d3eac 100755 --- a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf +++ b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf @@ -1,10 +1,5 @@ #!/bin/sh -uci -q batch <<-EOF >/dev/null - add_list dhcp.@dnsmasq[-1].ipset='/multipath-tcp.org/ss_rules_dst_bypass' - commit dhcp -EOF +multipathip=$(dig +short A multipath-tcp.org | tr -d "\n") +ipset add ss_rules_dst_bypass $multipathip curl -s -4 -m 3 --interface $1 http://www.multipath-tcp.org -uci -q batch <<-EOF >/dev/null - del_list dhcp.@dnsmasq[-1].ipset='/multipath-tcp.org/ss_rules_dst_bypass' - commit dhcp -EOF +ipset del ss_rules_dst_bypass $multipathip From 6b4e5d99bd467ff9f476cc2e347a990338162acd Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 19:42:44 +0200 Subject: [PATCH 261/307] Only check whois when we have an IP --- .../luasrc/controller/openmptcprouter.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index f40bd5901..417f6cb3e 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -665,7 +665,10 @@ function interfaces_status() end local publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname)) - local whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'")) + local whois = "" + if publicIP ~= "" then + whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'")) + end local data = { label = section['label'] or interface, From e633e10b0970bcef444ec1abad7a166259709494 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 24 Jul 2018 21:48:58 +0200 Subject: [PATCH 262/307] Update nginx package --- nginx/Config.in | 26 +- nginx/Config_ssl.in | 238 ++++++++ nginx/Makefile | 543 +++++++++++------- .../files-luci-support/60_nginx-luci-support | 4 +- .../70_nginx-luci-support-ssl | 4 +- nginx/files-luci-support/luci_nginx.conf | 2 +- .../patches/201-ignore-invalid-options.patch | 12 + 7 files changed, 623 insertions(+), 206 deletions(-) create mode 100644 nginx/Config_ssl.in create mode 100644 nginx/patches/201-ignore-invalid-options.patch diff --git a/nginx/Config.in b/nginx/Config.in index ebe0e567d..c2c9882c2 100644 --- a/nginx/Config.in +++ b/nginx/Config.in @@ -202,6 +202,11 @@ config NGINX_HTTP_SECURE_LINK prompt "Enable HTTP secure link module" default n +config NGINX_HTTP_SUB + bool + prompt "Enable HTTP sub module" + default n + config NGINX_HEADERS_MORE bool prompt "Enable Headers_more module" @@ -215,10 +220,27 @@ config NGINX_HTTP_BROTLI help Add support for brotli compression module. default n - + config NGINX_STREAM bool - prompt "Enable stream module" + prompt "Enable stream support" + help + Add support for stream module. default y +config NGINX_RTMP_MODULE + bool + prompt "Enable RTMP module" + depends on NGINX_SSL + help + Add support for NGINX-based Media Streaming Server module. + default n + +config NGINX_TS_MODULE + bool + prompt "Enable TS module" + help + Add support for MPEG-TS Live Module module. + default n + endmenu diff --git a/nginx/Config_ssl.in b/nginx/Config_ssl.in new file mode 100644 index 000000000..90d8098d2 --- /dev/null +++ b/nginx/Config_ssl.in @@ -0,0 +1,238 @@ +# +# Copyright (C) 2010-2016 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +menu "Configuration" + depends on PACKAGE_nginx-ssl + +config NGINX_DAV + bool + prompt "Enable WebDAV module" + help + Enable the HTTP and WebDAV methods PUT, DELETE, MKCOL, COPY and MOVE. + default n + +config NGINX_FLV + bool + prompt "Enable FLV module" + help + Provides the ability to seek within FLV (Flash) files using time-based offsets. + default n + +config NGINX_STUB_STATUS + bool + prompt "Enable stub status module" + help + Enable the stub status module which gives some status from the server. + default n + +config NGINX_HTTP_CHARSET + bool + prompt "Enable HTTP charset module" + default y + +config NGINX_HTTP_GZIP + bool + prompt "Enable HTTP gzip module" + default y + +config NGINX_HTTP_SSI + bool + prompt "Enable HTTP ssi module" + default y + +config NGINX_HTTP_USERID + bool + prompt "Enable HTTP userid module" + default y + +config NGINX_HTTP_ACCESS + bool + prompt "Enable HTTP access module" + default y + +config NGINX_HTTP_AUTH_BASIC + bool + prompt "Enable HTTP auth basic" + default y + +config NGINX_HTTP_AUTH_REQUEST + bool + prompt "Enable HTTP auth request module" + default n + +config NGINX_HTTP_AUTOINDEX + bool + prompt "Enable HTTP autoindex module" + default y + +config NGINX_HTTP_GEO + bool + prompt "Enable HTTP geo module" + default y + +config NGINX_HTTP_MAP + bool + prompt "Enable HTTP map module" + default y + +config NGINX_HTTP_SPLIT_CLIENTS + bool + prompt "Enable HTTP split clients" + default y + +config NGINX_HTTP_REFERER + bool + prompt "Enable HTTP referer module" + default y + +config NGINX_HTTP_REWRITE + bool + prompt "Enable HTTP rewrite module" + select NGINX_PCRE + default y + +config NGINX_HTTP_PROXY + bool + prompt "Enable HTTP proxy module" + default y + +config NGINX_HTTP_FASTCGI + bool + prompt "Enable HTTP fastcgi module" + default y + +config NGINX_HTTP_UWSGI + bool + prompt "Enable HTTP uwsgi module" + default y + +config NGINX_HTTP_SCGI + bool + prompt "Enable HTTP scgi module" + default y + +config NGINX_HTTP_MEMCACHED + bool + prompt "Enable HTTP memcached module" + default y + +config NGINX_HTTP_LIMIT_CONN + bool + prompt "Enable HTTP limit conn" + default y + +config NGINX_HTTP_LIMIT_REQ + bool + prompt "Enable HTTP limit req" + default y + +config NGINX_HTTP_EMPTY_GIF + bool + prompt "Enable HTTP empty gif" + default y + +config NGINX_HTTP_BROWSER + bool + prompt "Enable HTTP browser module" + default y + +config NGINX_HTTP_UPSTREAM_HASH + bool + prompt "Enable HTTP hash module" + default y + +config NGINX_HTTP_UPSTREAM_IP_HASH + bool + prompt "Enable HTTP IP hash module" + default y + +config NGINX_HTTP_UPSTREAM_LEAST_CONN + bool + prompt "Enable HTTP least conn module" + default y + +config NGINX_HTTP_UPSTREAM_KEEPALIVE + bool + prompt "Enable HTTP keepalive module" + default y + +config NGINX_HTTP_CACHE + bool + prompt "Enable HTTP cache" + default y + +config NGINX_HTTP_V2 + bool + prompt "Enable HTTP_V2 module" + default n + +config NGINX_PCRE + bool + prompt "Enable PCRE library usage" + default y + +config NGINX_NAXSI + bool + prompt "Enable NAXSI module" + default y + +config NGINX_LUA + bool + prompt "Enable Lua module" + default n + +config NGINX_HTTP_REAL_IP + bool + prompt "Enable HTTP real ip module" + default n + +config NGINX_HTTP_SECURE_LINK + bool + prompt "Enable HTTP secure link module" + default n + +config NGINX_HTTP_SUB + bool + prompt "Enable HTTP sub module" + default n + +config NGINX_HEADERS_MORE + bool + prompt "Enable Headers_more module" + help + Set and clear input and output headers...more than "add"! + default y + +config NGINX_HTTP_BROTLI + bool + prompt "Enable Brotli compression module" + help + Add support for brotli compression module. + default n + +config NGINX_STREAM + bool + prompt "Enable stream module" + help + Add support for stream module. + default n + +config NGINX_RTMP_MODULE + bool + prompt "Enable RTMP module" + help + Add support for NGINX-based Media Streaming Server module. + default n + +config NGINX_TS_MODULE + bool + prompt "Enable TS module" + help + Add support for MPEG-TS Live Module module. + default n + +endmenu diff --git a/nginx/Makefile b/nginx/Makefile index b3baa1d07..28c3457a6 100644 --- a/nginx/Makefile +++ b/nginx/Makefile @@ -8,18 +8,20 @@ include $(TOPDIR)/rules.mk PKG_NAME:=nginx -PKG_VERSION:=1.14.0 -PKG_RELEASE:=2 +PKG_VERSION:=1.15.1 +PKG_RELEASE:=5 PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://nginx.org/download/ -PKG_HASH:=5d15becbf69aba1fe33f8d416d97edd95ea8919ea9ac519eff9bafebb6022cb5 +PKG_HASH:=c7206858d7f832b8ef73a45c9b8f8e436bcb1ee88db2bc85b8e438ecec9d5460 -PKG_MAINTAINER:=Thomas Heil +PKG_MAINTAINER:=Thomas Heil \ + Ansuel Smith PKG_LICENSE:=2-clause BSD-like license -PKG_BUILD_DIR:=$(BUILD_DIR)/nginx-$(PKG_VERSION) +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) +PKG_FIXUP:=autoreconf PKG_BUILD_PARALLEL:=1 PKG_INSTALL:=1 @@ -58,202 +60,279 @@ PKG_CONFIG_DEPENDS := \ CONFIG_NGINX_HTTP_CACHE \ CONFIG_NGINX_HTTP_V2 \ CONFIG_NGINX_PCRE \ - CONFIG_NGINX_STREAM \ CONFIG_NGINX_NAXSI \ CONFIG_NGINX_LUA \ CONFIG_NGINX_HTTP_REAL_IP \ CONFIG_NGINX_HTTP_SECURE_LINK \ CONFIG_NGINX_HTTP_BROTLI \ - CONFIG_NGINX_HEADERS_MORE + CONFIG_NGINX_STREAM \ + CONFIG_NGINX_HEADERS_MORE \ + CONFIG_NGINX_RTMP_MODULE \ + CONFIG_NGINX_TS_MODULE \ include $(INCLUDE_DIR)/package.mk -define Package/nginx +define Package/nginx/default SECTION:=net CATEGORY:=Network SUBMENU:=Web Servers/Proxies TITLE:=Nginx web server URL:=http://nginx.org/ - DEPENDS:=+NGINX_PCRE:libpcre +(NGINX_SSL||NGINX_HTTP_CACHE||NGINX_HTTP_AUTH_BASIC):libopenssl +NGINX_HTTP_GZIP:zlib +NGINX_LUA:liblua +libpthread + DEPENDS:=+NGINX_PCRE:libpcre +(NGINX_SSL||NGINX_HTTP_CACHE||NGINX_HTTP_AUTH_BASIC):libopenssl \ + +NGINX_HTTP_GZIP:zlib +NGINX_LUA:liblua +libpthread endef define Package/nginx/description - nginx is an HTTP and reverse proxy server, as well as a mail proxy server, - written by Igor Sysoev. + nginx is an HTTP and reverse proxy server, as well as a mail proxy server, \ + written by Igor Sysoev. (Some module require SSL module enable to show up in \ + config menu) endef +define Package/nginx + $(Package/nginx/default) + VARIANT:=no-ssl +endef + +define Package/nginx-ssl + $(Package/nginx/default) + TITLE += with SSL support + DEPENDS +=+libopenssl + VARIANT:=ssl + PROVIDES:=nginx +endef + +Package/nginx-ssl/description = $(Package/nginx/description) \ + This varian is compiled with SSL support enabled. To enable additional module \ + select them in the nginx default configuration menu. + +define Package/nginx-all-module + $(Package/nginx/default) + TITLE += with ALL module selected + DEPENDS:=+libpcre +libopenssl +zlib +liblua +libpthread + VARIANT:=all-module + PROVIDES:=nginx +endef + +Package/nginx-all-module/description = $(Package/nginx/description) \ + This varian is compiled with ALL module selected. + define Package/nginx/config source "$(SOURCE)/Config.in" endef +define Package/nginx-ssl/config + source "$(SOURCE)/Config_ssl.in" +endef + config_files=nginx.conf mime.types define Package/nginx/conffiles /etc/nginx/ endef +Package/nginx-ssl/conffiles = $(Package/nginx/conffiles) +Package/nginx-all-module/conffiles = $(Package/nginx/conffiles) + + ADDITIONAL_MODULES:= -ifeq ($(CONFIG_NGINX_NAXSI),y) - ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-naxsi/naxsi_src -endif -ifeq ($(CONFIG_NGINX_LUA),y) - ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/lua-nginx -endif -ifeq ($(CONFIG_IPV6),y) - ADDITIONAL_MODULES += --with-ipv6 -endif -ifeq ($(CONFIG_NGINX_STUB_STATUS),y) - ADDITIONAL_MODULES += --with-http_stub_status_module -endif -ifeq ($(CONFIG_NGINX_FLV),y) - ADDITIONAL_MODULES += --with-http_flv_module -endif -ifeq ($(CONFIG_NGINX_SSL),y) - ADDITIONAL_MODULES += --with-http_ssl_module -endif -ifeq ($(CONFIG_NGINX_DAV),y) - ADDITIONAL_MODULES += --with-http_dav_module -endif -ifneq ($(CONFIG_NGINX_HTTP_CACHE),y) - ADDITIONAL_MODULES += --without-http-cache -endif -ifneq ($(CONFIG_NGINX_PCRE),y) - ADDITIONAL_MODULES += --without-pcre -endif -ifneq ($(CONFIG_NGINX_HTTP_CHARSET),y) - ADDITIONAL_MODULES += --without-http_charset_module + +ifneq ($(BUILD_VARIANT),all-module) + ifneq ($(CONFIG_NGINX_HTTP_CACHE),y) + ADDITIONAL_MODULES += --without-http-cache + endif + ifneq ($(CONFIG_NGINX_PCRE),y) + ADDITIONAL_MODULES += --without-pcre + endif + ifneq ($(CONFIG_NGINX_HTTP_CHARSET),y) + ADDITIONAL_MODULES += --without-http_charset_module + else + config_files += koi-utf koi-win win-utf + endif + ifneq ($(CONFIG_NGINX_HTTP_GZIP),y) + ADDITIONAL_MODULES += --without-http_gzip_module + endif + ifneq ($(CONFIG_NGINX_HTTP_SSI),y) + ADDITIONAL_MODULES += --without-http_ssi_module + endif + ifneq ($(CONFIG_NGINX_HTTP_USERID),y) + ADDITIONAL_MODULES += --without-http_userid_module + endif + ifneq ($(CONFIG_NGINX_HTTP_ACCESS),y) + ADDITIONAL_MODULES += --without-http_access_module + endif + ifneq ($(CONFIG_NGINX_HTTP_AUTH_BASIC),y) + ADDITIONAL_MODULES += --without-http_auth_basic_module + endif + ifneq ($(CONFIG_NGINX_HTTP_AUTOINDEX),y) + ADDITIONAL_MODULES += --without-http_autoindex_module + endif + ifneq ($(CONFIG_NGINX_HTTP_GEO),y) + ADDITIONAL_MODULES += --without-http_geo_module + endif + ifneq ($(CONFIG_NGINX_HTTP_MAP),y) + ADDITIONAL_MODULES += --without-http_map_module + endif + ifneq ($(CONFIG_NGINX_HTTP_SPLIT_CLIENTS),y) + ADDITIONAL_MODULES += --without-http_split_clients_module + endif + ifneq ($(CONFIG_NGINX_HTTP_REFERER),y) + ADDITIONAL_MODULES += --without-http_referer_module + endif + ifneq ($(CONFIG_NGINX_HTTP_REWRITE),y) + ADDITIONAL_MODULES += --without-http_rewrite_module + endif + ifneq ($(CONFIG_NGINX_HTTP_PROXY),y) + ADDITIONAL_MODULES += --without-http_proxy_module + endif + ifneq ($(CONFIG_NGINX_HTTP_FASTCGI),y) + ADDITIONAL_MODULES += --without-http_fastcgi_module + else + config_files += fastcgi_params + endif + ifneq ($(CONFIG_NGINX_HTTP_UWSGI),y) + ADDITIONAL_MODULES += --without-http_uwsgi_module + endif + ifneq ($(CONFIG_NGINX_HTTP_SCGI),y) + ADDITIONAL_MODULES += --without-http_scgi_module + endif + ifneq ($(CONFIG_NGINX_HTTP_MEMCACHED),y) + ADDITIONAL_MODULES += --without-http_memcached_module + endif + ifneq ($(CONFIG_NGINX_HTTP_LIMIT_CONN),y) + ADDITIONAL_MODULES += --without-http_limit_conn_module + endif + ifneq ($(CONFIG_NGINX_HTTP_LIMIT_REQ),y) + ADDITIONAL_MODULES += --without-http_limit_req_module + endif + ifneq ($(CONFIG_NGINX_HTTP_EMPTY_GIF),y) + ADDITIONAL_MODULES += --without-http_empty_gif_module + endif + ifneq ($(CONFIG_NGINX_HTTP_BROWSER),y) + ADDITIONAL_MODULES += --without-http_browser_module + endif + ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_HASH),y) + ADDITIONAL_MODULES += --without-http_upstream_hash_module + endif + ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_IP_HASH),y) + ADDITIONAL_MODULES += --without-http_upstream_ip_hash_module + endif + ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_LEAST_CONN),y) + ADDITIONAL_MODULES += --without-http_upstream_least_conn_module + endif + ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_KEEPALIVE),y) + ADDITIONAL_MODULES += --without-http_upstream_keepalive_module + endif + + ifeq ($(BUILD_VARIANT),ssl) + ifneq ($(CONFIG_NGINX_SSL),y) + ADDITIONAL_MODULES += --with-http_ssl_module + endif + endif + + ifeq ($(CONFIG_NGINX_SSL),y) + ADDITIONAL_MODULES += --with-http_ssl_module + endif + ifeq ($(CONFIG_NGINX_NAXSI),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-naxsi/naxsi_src + endif + ifeq ($(CONFIG_NGINX_LUA),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/lua-nginx + endif + ifeq ($(CONFIG_IPV6),y) + ADDITIONAL_MODULES += --with-ipv6 + endif + ifeq ($(CONFIG_NGINX_STUB_STATUS),y) + ADDITIONAL_MODULES += --with-http_stub_status_module + endif + ifeq ($(CONFIG_NGINX_FLV),y) + ADDITIONAL_MODULES += --with-http_flv_module + endif + ifeq ($(CONFIG_NGINX_DAV),y) + ADDITIONAL_MODULES += --with-http_dav_module + endif + ifeq ($(CONFIG_NGINX_HTTP_AUTH_REQUEST),y) + ADDITIONAL_MODULES += --with-http_auth_request_module + endif + ifeq ($(CONFIG_NGINX_HTTP_V2),y) + ADDITIONAL_MODULES += --with-http_v2_module + endif + ifeq ($(CONFIG_NGINX_HTTP_REAL_IP),y) + ADDITIONAL_MODULES += --with-http_realip_module + endif + ifeq ($(CONFIG_NGINX_HTTP_SECURE_LINK),y) + ADDITIONAL_MODULES += --with-http_secure_link_module + endif + ifeq ($(CONFIG_NGINX_HTTP_SUB),y) + ADDITIONAL_MODULES += --with-http_sub_module + endif + ifeq ($(CONFIG_NGINX_HEADERS_MORE),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-headers-more + endif + ifeq ($(CONFIG_NGINX_HTTP_BROTLI),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-brotli + endif + ifeq ($(CONFIG_NGINX_STREAM),y) + ADDITIONAL_MODULES += --with-stream + endif + ifeq ($(CONFIG_NGINX_RTMP_MODULE),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-rtmp + endif + ifeq ($(CONFIG_NGINX_TS_MODULE),y) + ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-ts + endif else - config_files += koi-utf koi-win win-utf -endif -ifneq ($(CONFIG_NGINX_HTTP_GZIP),y) - ADDITIONAL_MODULES += --without-http_gzip_module -endif -ifneq ($(CONFIG_NGINX_HTTP_SSI),y) - ADDITIONAL_MODULES += --without-http_ssi_module -endif -ifneq ($(CONFIG_NGINX_HTTP_USERID),y) - ADDITIONAL_MODULES += --without-http_userid_module -endif -ifneq ($(CONFIG_NGINX_HTTP_ACCESS),y) - ADDITIONAL_MODULES += --without-http_access_module -endif -ifneq ($(CONFIG_NGINX_HTTP_AUTH_BASIC),y) - ADDITIONAL_MODULES += --without-http_auth_basic_module -endif -ifeq ($(CONFIG_NGINX_HTTP_AUTH_REQUEST),y) - ADDITIONAL_MODULES += --with-http_auth_request_module -endif -ifneq ($(CONFIG_NGINX_HTTP_AUTOINDEX),y) - ADDITIONAL_MODULES += --without-http_autoindex_module -endif -ifneq ($(CONFIG_NGINX_HTTP_GEO),y) - ADDITIONAL_MODULES += --without-http_geo_module -endif -ifneq ($(CONFIG_NGINX_HTTP_MAP),y) - ADDITIONAL_MODULES += --without-http_map_module -endif -ifneq ($(CONFIG_NGINX_HTTP_SPLIT_CLIENTS),y) - ADDITIONAL_MODULES += --without-http_split_clients_module -endif -ifneq ($(CONFIG_NGINX_HTTP_REFERER),y) - ADDITIONAL_MODULES += --without-http_referer_module -endif -ifneq ($(CONFIG_NGINX_HTTP_REWRITE),y) - ADDITIONAL_MODULES += --without-http_rewrite_module -endif -ifneq ($(CONFIG_NGINX_HTTP_PROXY),y) - ADDITIONAL_MODULES += --without-http_proxy_module -endif -ifneq ($(CONFIG_NGINX_HTTP_FASTCGI),y) - ADDITIONAL_MODULES += --without-http_fastcgi_module -else - config_files += fastcgi_params -endif -ifneq ($(CONFIG_NGINX_HTTP_UWSGI),y) - ADDITIONAL_MODULES += --without-http_uwsgi_module -endif -ifneq ($(CONFIG_NGINX_HTTP_SCGI),y) - ADDITIONAL_MODULES += --without-http_scgi_module -endif -ifneq ($(CONFIG_NGINX_HTTP_MEMCACHED),y) - ADDITIONAL_MODULES += --without-http_memcached_module -endif -ifneq ($(CONFIG_NGINX_HTTP_LIMIT_CONN),y) - ADDITIONAL_MODULES += --without-http_limit_conn_module -endif -ifneq ($(CONFIG_NGINX_HTTP_LIMIT_REQ),y) - ADDITIONAL_MODULES += --without-http_limit_req_module -endif -ifneq ($(CONFIG_NGINX_HTTP_EMPTY_GIF),y) - ADDITIONAL_MODULES += --without-http_empty_gif_module -endif -ifneq ($(CONFIG_NGINX_HTTP_BROWSER),y) - ADDITIONAL_MODULES += --without-http_browser_module -endif -ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_HASH),y) - ADDITIONAL_MODULES += --without-http_upstream_hash_module -endif -ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_IP_HASH),y) - ADDITIONAL_MODULES += --without-http_upstream_ip_hash_module -endif -ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_LEAST_CONN),y) - ADDITIONAL_MODULES += --without-http_upstream_least_conn_module -endif -ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_KEEPALIVE),y) - ADDITIONAL_MODULES += --without-http_upstream_keepalive_module -endif -ifeq ($(CONFIG_NGINX_HTTP_V2),y) - ADDITIONAL_MODULES += --with-http_v2_module -endif -ifeq ($(CONFIG_NGINX_HTTP_REAL_IP),y) - ADDITIONAL_MODULES += --with-http_realip_module -endif -ifeq ($(CONFIG_NGINX_HTTP_SECURE_LINK),y) - ADDITIONAL_MODULES += --with-http_secure_link_module -endif -ifeq ($(CONFIG_NGINX_HEADERS_MORE),y) - ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-headers-more -endif -ifeq ($(CONFIG_NGINX_HTTP_BROTLI),y) - ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-brotli -endif -ifeq ($(CONFIG_NGINX_STREAM),y) - ADDITIONAL_MODULES += --with-stream + CONFIG_NGINX_HEADERS_MORE:=y + CONFIG_NGINX_HTTP_BROTLI:=y + CONFIG_NGINX_RTMP_MODULE:=y + CONFIG_NGINX_TS_MODULE:=y + CONFIG_NGINX_NAXSI:=y + CONFIG_NGINX_LUA:=y + ADDITIONAL_MODULES += --with-http_ssl_module --add-module=$(PKG_BUILD_DIR)/nginx-naxsi/naxsi_src \ + --add-module=$(PKG_BUILD_DIR)/lua-nginx --with-ipv6 --with-http_stub_status_module --with-http_flv_module \ + --with-http_dav_module --with-stream --with-http_auth_request_module --with-http_v2_module --with-http_realip_module \ + --with-http_secure_link_module --with-http_sub_module --add-module=$(PKG_BUILD_DIR)/nginx-headers-more \ + --add-module=$(PKG_BUILD_DIR)/nginx-brotli --add-module=$(PKG_BUILD_DIR)/nginx-rtmp \ + --add-module=$(PKG_BUILD_DIR)/nginx-ts + config_files += koi-utf koi-win win-utf fastcgi_params endif -define Package/nginx-mod-luci +define Package/nginx-mod-luci/default + TITLE:=Nginx on LuCI SECTION:=net CATEGORY:=Network SUBMENU:=Web Servers/Proxies TITLE:=Support file for Nginx URL:=http://nginx.org/ - DEPENDS:=nginx +uwsgi-cgi +uwsgi-cgi-luci-support + DEPENDS:=+uwsgi-cgi +uwsgi-cgi-luci-support +endef + +define Package/nginx-mod-luci + $(Package/nginx-mod-luci/default) + DEPENDS += +nginx endef define Package/nginx-mod-luci/description - Support file for LuCI in nginx (include custom nginx configuration, autostart script for uwsgi) + Support file for LuCI in nginx. Include custom nginx configuration, autostart script for uwsgi. endef define Package/nginx-mod-luci-ssl - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=Support file for Nginx (SSL) - URL:=http://nginx.org/ - DEPENDS:=nginx +nginx-mod-luci + $(Package/nginx-mod-luci/default) + TITLE += with HTTPS support + DEPENDS += +nginx-ssl endef -define Package/nginx-mod-luci-ssl/description - Support file for LuCI in nginx (include custom nginx configuration, autostart script for uwsgi, redirect from http to https) -endef +Package/nginx-mod-luci-ssl/description = $(define Package/nginx-mod-luci/description) \ + This also include redirect from http to https and cert autogeneration. -TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK -DNGX_HAVE_GCC_ATOMIC +TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK TARGET_LDFLAGS += -Wl,--gc-sections -define Build/Configure - ( cd $(PKG_BUILD_DIR) ; \ - $(if $(CONFIG_NGINX_LUA),LUA_INC=$(STAGING_DIR)/usr/include LUA_LIB=$(STAGING_DIR)/usr/lib) \ - ./configure \ +ifeq ($(CONFIG_NGINX_LUA),y) + CONFIGURE_VARS += LUA_INC=$(STAGING_DIR)/usr/include \ + LUA_LIB=$(STAGING_DIR)/usr/lib +endif + +CONFIGURE_ARGS += \ --crossbuild=Linux::$(ARCH) \ --prefix=/usr \ --conf-path=/etc/nginx/nginx.conf \ @@ -268,9 +347,7 @@ define Build/Configure --with-cc="$(TARGET_CC)" \ --with-cc-opt="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \ --with-ld-opt="$(TARGET_LDFLAGS)" \ - --without-http_upstream_zone_module \ - ) -endef + --without-http_upstream_zone_module define Package/nginx-mod-luci/install $(INSTALL_DIR) $(1)/etc/nginx @@ -281,6 +358,7 @@ define Package/nginx-mod-luci/install endef define Package/nginx-mod-luci-ssl/install + $(Package/nginx-mod-luci/install) $(INSTALL_DIR) $(1)/etc/nginx $(INSTALL_BIN) ./files-luci-support/luci_nginx_ssl.conf $(1)/etc/nginx/luci_nginx_ssl.conf $(INSTALL_DIR) $(1)/etc/uci-defaults @@ -303,67 +381,130 @@ endif $(if $(CONFIG_NGINX_NAXSI),$(chmod 0640 $(1)/etc/nginx/naxsi_core.rules)) endef +Package/nginx-ssl/install = $(Package/nginx/install) +Package/nginx-all-module/install = $(Package/nginx/install) + define Build/Prepare - $(call Build/Prepare/Default) - $(if $(CONFIG_NGINX_NAXSI),$(call Prepare/nginx-naxsi)) - $(if $(CONFIG_NGINX_LUA),$(call Prepare/lua-nginx)) - $(if $(CONFIG_NGINX_HTTP_BROTLI),$(call Prepare/nginx-brotli)) - $(if $(CONFIG_NGINX_HEADERS_MORE),$(call Prepare/nginx-headers-more)) + $(Build/Prepare/Default) + $(Prepare/nginx-naxsi) + $(Prepare/lua-nginx) + $(Prepare/nginx-brotli) + $(Prepare/nginx-headers-more) + $(Prepare/nginx-rtmp) + $(Prepare/nginx-ts) endef -define Download/nginx-headers-more - VERSION:=a9f7c7e86cc7441d04e2f11f01c2e3a9c4b0301d - SUBDIR:=nginx-headers-more - FILE:=headers-more-nginx-module-$(PKG_VERSION)-$$(VERSION).tar.gz - URL:=https://github.com/openresty/headers-more-nginx-module.git - PROTO:=git -endef -define Prepare/nginx-headers-more - $(eval $(call Download,nginx-headers-more)) +ifeq ($(CONFIG_NGINX_HEADERS_MORE),y) + define Download/nginx-headers-more + VERSION:=a9f7c7e86cc7441d04e2f11f01c2e3a9c4b0301d + SUBDIR:=nginx-headers-more + FILE:=headers-more-nginx-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/openresty/headers-more-nginx-module.git + MIRROR_HASH:=432609015719aaa7241e5166c7cda427acbe004f725887f78ef629d51bd9cb3f + PROTO:=git + endef + $(eval $(call Download,nginx-headers-more)) + + define Prepare/nginx-headers-more + $(eval $(Download/nginx-headers-more)) gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) -endef + endef +endif -define Download/nginx-brotli - VERSION:=37ab9b2933a0b756ba3447000b7f31d432ed8228 - SUBDIR:=nginx-brotli - FILE:=ngx-brotli-module-$(PKG_VERSION)-$$(VERSION).tar.gz - URL:=https://github.com/eustas/ngx_brotli.git - PROTO:=git -endef -define Prepare/nginx-brotli - $(eval $(call Download,nginx-brotli)) +ifeq ($(CONFIG_NGINX_HTTP_BROTLI),y) + define Download/nginx-brotli + VERSION:=e26248ee361c04e25f581b92b85d95681bdffb39 + SUBDIR:=nginx-brotli + FILE:=ngx-brotli-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/eustas/ngx_brotli.git + MIRROR_HASH:=76b891ba49f82f0cfbc9cba875646e26ee986b522373e0aa2698a9923a4adcdb + PROTO:=git + endef + $(eval $(call Download,nginx-brotli)) + + define Prepare/nginx-brotli + $(eval $(Download/nginx-brotli)) gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) -endef + endef +endif -define Download/nginx-naxsi - VERSION:=fc4740f9734cabc1ce4c9d4cddc4b472eab1cc4b - SUBDIR:=nginx-naxsi - FILE:=nginx-naxsi-module-$(PKG_VERSION)-$$(VERSION).tar.gz - URL:=https://github.com/nbs-system/naxsi.git - PROTO:=git -endef -define Prepare/nginx-naxsi - $(eval $(call Download,nginx-naxsi)) +ifeq ($(CONFIG_NGINX_RTMP_MODULE),y) + define Download/nginx-rtmp + VERSION:=791b6136f02bc9613daf178723ac09f4df5a3bbf + SUBDIR:=nginx-rtmp + FILE:=ngx-rtmp-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/arut/nginx-rtmp-module.git + MIRROR_HASH:=8db3f7b545ce98f47415e0436e12dfb55ae787afd3cd9515b5642c7b9dc0ef00 + PROTO:=git + endef + $(eval $(call Download,nginx-rtmp)) + + define Prepare/nginx-rtmp + $(eval $(call Download,nginx-rtmp)) gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) -endef + endef +endif -define Download/lua-nginx - VERSION:=55743aeba3075b34a250380b32bad6366eae6c30 - SUBDIR:=lua-nginx - FILE:=lua-nginx-module-$(PKG_VERSION)-$$(VERSION).tar.gz - URL:=https://github.com/openresty/lua-nginx-module.git - PROTO:=git -endef -define Prepare/lua-nginx - $(eval $(call Download,lua-nginx)) +ifeq ($(CONFIG_NGINX_TS_MODULE),y) + define Download/nginx-ts + VERSION:=ef2f874d95cc75747eb625a292524a702aefb0fd + SUBDIR:=nginx-ts + FILE:=ngx-ts-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/arut/nginx-ts-module.git + MIRROR_HASH:=31ecc9968b928886b54884138eafe2fa747648bca5094d4c3132e8ae9509d1d3 + PROTO:=git + endef + $(eval $(call Download,nginx-ts)) + + define Prepare/nginx-ts + $(eval $(call Download,nginx-ts)) + gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) + endef +endif + + +ifeq ($(CONFIG_NGINX_NAXSI),y) + define Download/nginx-naxsi + VERSION:=951123ad456bdf5ac94e8d8819342fe3d49bc002 + SUBDIR:=nginx-naxsi + FILE:=nginx-naxsi-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/nbs-system/naxsi.git + MIRROR_HASH:=7ab791f2ff38096f48013141bbfe20ba213d5e04dcac08ca82e0cac07d5c30f0 + PROTO:=git + endef + $(eval $(call Download,nginx-naxsi)) + + define Prepare/nginx-naxsi + $(eval $(Download/nginx-naxsi)) + gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) + endef +endif + + +ifeq ($(CONFIG_NGINX_LUA),y) + define Download/lua-nginx + VERSION:=576a10d246daf81c0ce1b959c50ee807769c01a8 + SUBDIR:=lua-nginx + FILE:=lua-nginx-module-$(PKG_VERSION)-$$(VERSION).tar.gz + URL:=https://github.com/openresty/lua-nginx-module.git + MIRROR_HASH:=85ab2fc752d4e09f266209fdec507b30c57bb966c34bbff148cf3459ae5cac80 + PROTO:=git + endef + $(eval $(call Download,lua-nginx)) + + define Prepare/lua-nginx + $(eval $(Download/lua-nginx)) gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) $(call PatchDir,$(PKG_BUILD_DIR),./patches-lua-nginx) -endef + endef +endif $(eval $(call BuildPackage,nginx)) +$(eval $(call BuildPackage,nginx-ssl)) +$(eval $(call BuildPackage,nginx-all-module)) $(eval $(call BuildPackage,nginx-mod-luci)) $(eval $(call BuildPackage,nginx-mod-luci-ssl)) diff --git a/nginx/files-luci-support/60_nginx-luci-support b/nginx/files-luci-support/60_nginx-luci-support index 38a8aa885..dd076d260 100644 --- a/nginx/files-luci-support/60_nginx-luci-support +++ b/nginx/files-luci-support/60_nginx-luci-support @@ -1,7 +1,7 @@ #!/bin/sh if [ -f "/etc/nginx/luci_nginx.conf" ] && [ -f "/etc/nginx/nginx.conf" ]; then - if [ ! "$(cat '/etc/nginx/nginx.conf' | grep -q 'luci_uwsgi.conf')" ]; then + if [ ! "$(cat '/etc/nginx/nginx.conf' | grep 'luci_uwsgi.conf')" ]; then mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_old mv /etc/nginx/luci_nginx.conf /etc/nginx/nginx.conf core_number=$(grep -c ^processor /proc/cpuinfo) @@ -20,6 +20,8 @@ if [ -f "/etc/nginx/luci_nginx.conf" ] && [ -f "/etc/nginx/nginx.conf" ]; then else /etc/init.d/uwsgi start fi + else + rm /etc/nginx/luci_nginx.conf fi fi diff --git a/nginx/files-luci-support/70_nginx-luci-support-ssl b/nginx/files-luci-support/70_nginx-luci-support-ssl index 1cc1a85fc..76ce3a819 100644 --- a/nginx/files-luci-support/70_nginx-luci-support-ssl +++ b/nginx/files-luci-support/70_nginx-luci-support-ssl @@ -2,7 +2,7 @@ if [ -f "/etc/nginx/luci_nginx_ssl.conf" ] && [ -f "/etc/nginx/nginx.conf" ]; then - if [ ! "$(cat '/etc/nginx/nginx.conf' | grep -q 'return 301 https://$host$request_uri;')" ]; then + if [ ! "$(cat '/etc/nginx/nginx.conf' | grep 'return 301 https://$host$request_uri;')" ]; then if [ -f "/etc/nginx/nginx.conf_old" ]; then rm /etc/nginx/nginx.conf else @@ -16,6 +16,8 @@ if [ -f "/etc/nginx/luci_nginx_ssl.conf" ] && [ -f "/etc/nginx/nginx.conf" ]; th else /etc/init.d/nginx start fi + else + rm /etc/nginx/luci_nginx_ssl.conf fi fi diff --git a/nginx/files-luci-support/luci_nginx.conf b/nginx/files-luci-support/luci_nginx.conf index 78f916b04..53d4ab6c7 100644 --- a/nginx/files-luci-support/luci_nginx.conf +++ b/nginx/files-luci-support/luci_nginx.conf @@ -1,5 +1,5 @@ -user root; +user nobody nogroup; worker_processes 1; #error_log logs/error.log; diff --git a/nginx/patches/201-ignore-invalid-options.patch b/nginx/patches/201-ignore-invalid-options.patch new file mode 100644 index 000000000..82180239d --- /dev/null +++ b/nginx/patches/201-ignore-invalid-options.patch @@ -0,0 +1,12 @@ +--- a/auto/options ++++ b/auto/options +@@ -391,8 +391,7 @@ + --test-build-solaris-sendfilev) NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;; + + *) +- echo "$0: error: invalid option \"$option\"" +- exit 1 ++ echo "$0: error: ignoring invalid option \"$option\"" + ;; + esac + done From a8c6be62ff2e28b8ef0f3bf2beac60b115e02d10 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 25 Jul 2018 09:20:39 +0200 Subject: [PATCH 263/307] Fix Nginx for RPI --- nginx/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nginx/Makefile b/nginx/Makefile index 28c3457a6..763e41222 100644 --- a/nginx/Makefile +++ b/nginx/Makefile @@ -324,7 +324,7 @@ endef Package/nginx-mod-luci-ssl/description = $(define Package/nginx-mod-luci/description) \ This also include redirect from http to https and cert autogeneration. -TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK +TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK -DNGX_HAVE_GCC_ATOMIC TARGET_LDFLAGS += -Wl,--gc-sections ifeq ($(CONFIG_NGINX_LUA),y) From e9b7f7e40e0fa225982ebe7c2d91c8bce6718ca4 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 25 Jul 2018 10:49:02 +0200 Subject: [PATCH 264/307] Use ipset directly to bypass shadowsocks --- openmptcprouter/files/bin/omr-test-speed | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index cd22968cf..68b1454cf 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -8,13 +8,8 @@ trap : HUP INT TERM if [ -z "$INTERFACE" ]; then curl http://$HOST/files/10Gio.dat >/dev/null || echo else - uci -q batch <<-EOF >/dev/null - add_list dhcp.@dnsmasq[-1].ipset='/$HOST/ss_rules_dst_bypass' - commit dhcp - EOF + hostip=$(dig +short A $HOST | tr -d "\n") + ipset add ss_rules_dst_bypass $hostip curl --interface $INTERFACE http://$HOST/files/10Gio.dat >/dev/null || echo - uci -q batch <<-EOF >/dev/null - del_list dhcp.@dnsmasq[-1].ipset='/$HOST/ss_rules_dst_bypass' - commit dhcp - EOF + ipset del ss_rules_dst_bypass $hostip fi From 4ba73e9908c7902a9445bd2bd9c0bbd363a78e95 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 25 Jul 2018 14:44:21 +0200 Subject: [PATCH 265/307] Change error after no server ping response and better submit buttons --- .../luasrc/view/openmptcprouter/settings.htm | 2 +- .../luasrc/view/openmptcprouter/wanstatus.htm | 2 +- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index be78b6187..23948f599 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -73,7 +73,7 @@
      - +
      <%+footer%> diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index dd4ecd95b..62822139a 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -247,7 +247,7 @@ } if(server_ping == 'DOWN') { - statusMessage += 'Can\'t ping server
      ' + statusMessage += 'No Server ping response after 1 second
      ' } if(multipath == 'master' && master > 1) { diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index f0fa07510..6c350168f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -169,7 +169,7 @@
      - +
      From 470b839c610bfe6b4d3d67ce284b7589bb237723 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 25 Jul 2018 15:08:16 +0200 Subject: [PATCH 266/307] Fix iperf --- luci-app-iperf/luasrc/controller/iperf.lua | 15 +++++++-------- luci-app-iperf/luasrc/view/iperf/test.htm | 8 ++++---- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/luci-app-iperf/luasrc/controller/iperf.lua b/luci-app-iperf/luasrc/controller/iperf.lua index 8adbe8c7b..434851278 100644 --- a/luci-app-iperf/luasrc/controller/iperf.lua +++ b/luci-app-iperf/luasrc/controller/iperf.lua @@ -15,10 +15,9 @@ function run_test(server,proto,mode,updown,omit,parallel,transmit,bitrate) local iperf local addr = uci:get("iperf",server,"host") local ports = uci:get("iperf",server,"ports") - if proto == "ipv4" then - local ipv = 4 - else - local ipv = 6 + local ipv = "4" + if proto == "ipv6" then + local ipv = "6" end local t={} @@ -28,15 +27,15 @@ function run_test(server,proto,mode,updown,omit,parallel,transmit,bitrate) local port = t[ math.random( #t ) ] if mode == "tcp" then if updown == "upload" then - iperf = io.popen("iperf3 -c %s -P %s -%i -p %s -O %s -t %i -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit}) + iperf = io.popen("iperf3 -c %s -P %s -%s -p %s -O %s -t %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit}) else - iperf = io.popen("iperf3 -c %s -P %s -%i -p %s -O %s -R -t %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit}) + iperf = io.popen("iperf3 -c %s -P %s -%s -p %s -O %s -R -t %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit}) end else if updown == "upload" then - iperf = io.popen("iperf3 -c %s -P %s -%i -p %s -O %s -t %s -u -b %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit,bitrate}) + iperf = io.popen("iperf3 -c %s -P %s -%s -p %s -O %s -t %s -u -b %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit,bitrate}) else - iperf = io.popen("iperf3 -c %s -P %s -%i -p %s -O %s -R -t %s -u -b %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit,bitrate}) + iperf = io.popen("iperf3 -c %s -P %s -%s -p %s -O %s -R -t %s -u -b %s -J" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit,bitrate}) end end if iperf then diff --git a/luci-app-iperf/luasrc/view/iperf/test.htm b/luci-app-iperf/luasrc/view/iperf/test.htm index d086e820c..660d7e4a8 100644 --- a/luci-app-iperf/luasrc/view/iperf/test.htm +++ b/luci-app-iperf/luasrc/view/iperf/test.htm @@ -123,10 +123,10 @@
      -
      -
      -
      - <%:0 for unlimited. Need to be limited for UDP test%> +
      +
      + <%:0 for unlimited. Need to be limited for UDP test%> +
      From 743672263ed7e731672a0c68307a63f6a56685e1 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Thu, 26 Jul 2018 22:33:53 +0200 Subject: [PATCH 267/307] Remove tcp_mem tuning --- shadowsocks-libev/files/shadowsocks.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf index ff5f8d24f..05a74d6b3 100644 --- a/shadowsocks-libev/files/shadowsocks.conf +++ b/shadowsocks-libev/files/shadowsocks.conf @@ -37,7 +37,7 @@ net.ipv4.tcp_rmem = 4096 87380 134217728 # TCP write buffer net.ipv4.tcp_wmem = 4096 87380 134217728 # TCP buffer -#net.ipv4.tcp_mem = 25600 87380 102400 +##net.ipv4.tcp_mem = 25600 87380 102400 # turn off path MTU discovery net.ipv4.tcp_mtu_probing = 0 From e781082dbbd6c48042c50827920940a6e29273ec Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 08:57:10 +0200 Subject: [PATCH 268/307] Add again tcp_mem sysctl --- shadowsocks-libev/files/shadowsocks.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf index 05a74d6b3..9f705a6f1 100644 --- a/shadowsocks-libev/files/shadowsocks.conf +++ b/shadowsocks-libev/files/shadowsocks.conf @@ -35,9 +35,9 @@ net.ipv4.tcp_fastopen = 3 # TCP receive buffer net.ipv4.tcp_rmem = 4096 87380 134217728 # TCP write buffer -net.ipv4.tcp_wmem = 4096 87380 134217728 +net.ipv4.tcp_wmem = 4096 65536 134217728 # TCP buffer -##net.ipv4.tcp_mem = 25600 87380 102400 +net.ipv4.tcp_mem = 134217728 134277728 134217728 # turn off path MTU discovery net.ipv4.tcp_mtu_probing = 0 From 17dc28e63c833bddcd3ec94cb8b05ed7680f6629 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 15:36:10 +0200 Subject: [PATCH 269/307] No server ping if gw down --- .../luasrc/controller/openmptcprouter.lua | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 417f6cb3e..4d96673bd 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -616,17 +616,21 @@ function interfaces_status() connectivity = 'ERROR' end - local latency = "-" - local server_ping = 'UP' - local server_ping_test = sys.exec("ping -W 1 -c 1 -I " .. ifname .. " " .. mArray.openmptcprouter["wan_addr"]) - local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) - if server_ping_result ~= "" then - server_ping = 'DOWN' - if connectivity == "OK" then - connectivity = 'WARNING' - end + local latency = "" + local server_ping = '' + if connectivity ~= "ERROR" then + local server_ping_test = sys.exec("ping -W 1 -c 1 -I " .. ifname .. " " .. mArray.openmptcprouter["wan_addr"]) + local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) + if server_ping_result ~= "" then + server_ping = 'DOWN' + if connectivity == "OK" then + connectivity = 'WARNING' + end + else + server_ping = 'UP' + latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f4 | cut -d '.' -f1")) + end end - local latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f4 | cut -d '.' -f1")) if mArray.openmptcprouter["dns"] == true and ifname ~= nil and gateway ~= "" and gw_ping == "UP" then -- Test if multipath can work on the connection From ba819f9afeaf9fb8fa521633aa8a6f383a59f3af Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 16:49:26 +0200 Subject: [PATCH 270/307] Force ipv4 for omr-test-speed and add omt-test-speedv6 for ipv6 --- openmptcprouter/files/bin/omr-test-speed | 4 ++-- openmptcprouter/files/bin/omr-test-speedv6 | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100755 openmptcprouter/files/bin/omr-test-speedv6 diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index 68b1454cf..d3e542680 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -6,10 +6,10 @@ HOST="proof.ovh.net" trap : HUP INT TERM if [ -z "$INTERFACE" ]; then - curl http://$HOST/files/10Gio.dat >/dev/null || echo + curl -4 http://$HOST/files/10Gio.dat >/dev/null || echo else hostip=$(dig +short A $HOST | tr -d "\n") ipset add ss_rules_dst_bypass $hostip - curl --interface $INTERFACE http://$HOST/files/10Gio.dat >/dev/null || echo + curl -4 --interface $INTERFACE http://$HOST/files/10Gio.dat >/dev/null || echo ipset del ss_rules_dst_bypass $hostip fi diff --git a/openmptcprouter/files/bin/omr-test-speedv6 b/openmptcprouter/files/bin/omr-test-speedv6 new file mode 100755 index 000000000..43ca0141f --- /dev/null +++ b/openmptcprouter/files/bin/omr-test-speedv6 @@ -0,0 +1,15 @@ +#!/bin/sh +# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : + +INTERFACE="$1" +HOST="proof.ovh.net" + +trap : HUP INT TERM +if [ -z "$INTERFACE" ]; then + curl -6 http://$HOST/files/10Gio.dat >/dev/null || echo +else + hostip=$(dig +short A $HOST | tr -d "\n") + ipset add ss_rules_dst_bypass $hostip + curl -6 --interface $INTERFACE http://$HOST/files/10Gio.dat >/dev/null || echo + ipset del ss_rules_dst_bypass $hostip +fi From efe7a7faa4943470e9596647062c4a2d06a5322e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 16:57:32 +0200 Subject: [PATCH 271/307] No errors for ipset --- luci-app-openmptcprouter/root/bin/omr-ip-intf | 4 ++-- luci-app-openmptcprouter/root/bin/omr-mptcp-intf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/root/bin/omr-ip-intf b/luci-app-openmptcprouter/root/bin/omr-ip-intf index feb3a9a43..cb7946a62 100755 --- a/luci-app-openmptcprouter/root/bin/omr-ip-intf +++ b/luci-app-openmptcprouter/root/bin/omr-ip-intf @@ -1,5 +1,5 @@ #!/bin/sh checkip=$(dig +short A ip.openmptcprouter.com | tr -d "\n") -ipset add ss_rules_dst_bypass $checkip +ipset add ss_rules_dst_bypass $checkip > /dev/null 2>&1 curl -s -4 -m 3 --interface $1 http://ip.openmptcprouter.com -ipset del ss_rules_dst_bypass $checkip +ipset del ss_rules_dst_bypass $checkip > /dev/null 2>&1 diff --git a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf index ac24d3eac..9967d9576 100755 --- a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf +++ b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf @@ -1,5 +1,5 @@ #!/bin/sh multipathip=$(dig +short A multipath-tcp.org | tr -d "\n") -ipset add ss_rules_dst_bypass $multipathip +ipset add ss_rules_dst_bypass $multipathip > /dev/null 2>&1 curl -s -4 -m 3 --interface $1 http://www.multipath-tcp.org -ipset del ss_rules_dst_bypass $multipathip +ipset del ss_rules_dst_bypass $multipathip > /dev/null 2>&1 From d82c349743903cf48cec90b7816e0831be1ba3cd Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 17:02:07 +0200 Subject: [PATCH 272/307] Fix ping server when no ifname or no server --- .../luasrc/controller/openmptcprouter.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 4d96673bd..5f25745e7 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -618,7 +618,7 @@ function interfaces_status() local latency = "" local server_ping = '' - if connectivity ~= "ERROR" then + if connectivity ~= "ERROR" and ifname ~= "" and ifname ~= nil and mArray.openmptcprouter["wan_addr"] ~= "" then local server_ping_test = sys.exec("ping -W 1 -c 1 -I " .. ifname .. " " .. mArray.openmptcprouter["wan_addr"]) local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) if server_ping_result ~= "" then @@ -632,17 +632,17 @@ function interfaces_status() end end - if mArray.openmptcprouter["dns"] == true and ifname ~= nil and gateway ~= "" and gw_ping == "UP" then + local multipath_available + if mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and gateway ~= "" and gw_ping == "UP" then -- Test if multipath can work on the connection - local multipath_available local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) if multipath_available_state == "" then - multipath_available = 'OK' + multipath_available = 'OK' else - multipath_available = 'ERROR' + multipath_available = 'ERROR' end else - multipath_available = 'NO CHECK' + multipath_available = 'NO CHECK' end From c32da33c5374929fc5f1589f52022b914f729ec7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 17:12:39 +0200 Subject: [PATCH 273/307] Add wait param to iptables for omr-bypass --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 6b61568cf..f33b2cdba 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -36,8 +36,8 @@ start_service() { ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1 - if [ "$(iptables -t mangle -L | grep 'match-set ss_rules_dst_bypass dst MARK set')" = "" ]; then - iptables-restore --noflush <<-EOF + if [ "$(iptables -w 40 -t mangle -L | grep 'match-set ss_rules_dst_bypass dst MARK set')" = "" ]; then + iptables-restore --wait=60 --noflush <<-EOF *mangle -A PREROUTING -m set --match-set ss_rules_dst_bypass dst -j MARK --set-mark 0x539 COMMIT @@ -49,7 +49,7 @@ start_service() { config_list_foreach dpi "proto" _bypass_proto ndpi_rules=$(echo $ndpi_rules | awk 'NF') if [ "$ndpi_rules" != "" ]; then - iptables-restore --noflush <<-EOF + iptables-restore --wait=60 --noflush <<-EOF *mangle :omr-bypass-dpi - -A PREROUTING -m addrtype ! --dst-type LOCAL -j omr-bypass-dpi From 76b78ae2e7ed91cef3933ddaefe7de16f9a5050b Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 17:42:30 +0200 Subject: [PATCH 274/307] Fix tracker --- mptcp/files/etc/init.d/mptcp | 2 +- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index ad891efd9..51911eec0 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -33,7 +33,7 @@ global_multipath_settings() { } interface_multipath_settings() { - local mode iface + local mode iface proto local config="$1" local intf="$2" local enabled diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 793e79b34..5d3376e9c 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -112,6 +112,8 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then config_foreach set_route interface $OMR_TRACKER_INTERFACE fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then + config_load shadowsocks-libev + config_foreach del_ss_route server if [ "$(uci -q show shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q show shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ]; then uci -q set shadowsocks-libev.ss_rules.redir_udp='hi2' /etc/init.d/shadowsocks-libev rules_down From 54f5e4c105589e54d0f264e9ce9aa17670df3ab7 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 19:10:08 +0200 Subject: [PATCH 275/307] Fix uci --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 1 - 1 file changed, 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 0c312909e..11545fc28 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -19,7 +19,6 @@ uci -q batch <<-EOF >/dev/null del dhcp.@dnsmasq[-1].interface commit dhcp EOF -fi rm -f /tmp/luci-indexcache exit 0 From 36fa9d506749e5041b11ede075a8963935d8574d Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 23:11:37 +0200 Subject: [PATCH 276/307] Less error in logs if no IP defined --- .../share/omr/post-tracking.d/post-tracking | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 5d3376e9c..27adfb46b 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -36,7 +36,6 @@ set_route() { set_ss_route() { local server_ip upstreams nginxip local metric=$2 - [ -z "$metric" ] && metric=1 config_get server_ip $1 server if [ "$server_ip" = "127.0.0.1" ]; then upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') @@ -49,7 +48,7 @@ set_ss_route() { fi done else - if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + if [ "$metric" != "off" ] && [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then _log "Set server $server_ip route via $OMR_TRACKER_DEVICE metric $metric" ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric fi @@ -59,22 +58,40 @@ set_ss_route() { del_ss_route() { local server_ip upstreams nginxip local metric=$2 - [ -z "$metric" ] && metric=1 config_get server_ip $1 server if [ "$server_ip" = "127.0.0.1" ]; then upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') for up in $upstreams; do _log "down : $up" nginxip=$(echo $up | cut -d: -f1) - if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip)" != "" ]; then - _log "Remove server $nginxip route via $OMR_TRACKER_DEVICE" - ip route delete $nginxip dev $OMR_TRACKER_DEVICE metric $metric + if [ "$metric" = "all" ]; then + if [ "$nginxip" != "" ] && [ "$(ip route show | grep $nginxip)" != "" ]; then + _log "Remove all server $nginxip route" + ip route delete $nginxip + fi + else + if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip)" != "" ]; then + _log "Remove server $nginxip route via $OMR_TRACKER_DEVICE" + ip route delete $nginxip dev $OMR_TRACKER_DEVICE metric $metric + fi fi done else - if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip)" != "" ]; then - _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" - ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric $metric + if [ "$metric" = "all" ]; then + if [ "$server_ip" != "" ] && [ "$(ip route show | grep $server_ip)" != "" ]; then + _log "Remove all server $server_ip route" + ip route delete $server_ip + fi + elif [ "$metric" = "off" ]; then + if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then + _log "Remove all server $server_ip route via $OMR_TRACKER_DEVICE" + ip route delete $server_ip dev $OMR_TRACKER_DEVICE + fi + else + if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip)" != "" ]; then + _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" + ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric $metric + fi fi fi } @@ -104,7 +121,12 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then fi glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 down > /dev/null 2>&1 config_load shadowsocks-libev - config_foreach del_ss_route server + if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then + local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}') + config_foreach del_ss_route server $metric + else + config_foreach del_ss_route server none + fi } fi if [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then @@ -112,8 +134,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then config_foreach set_route interface $OMR_TRACKER_INTERFACE fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then + _log "Tunnel down" config_load shadowsocks-libev - config_foreach del_ss_route server + config_foreach del_ss_route server all if [ "$(uci -q show shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q show shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ]; then uci -q set shadowsocks-libev.ss_rules.redir_udp='hi2' /etc/init.d/shadowsocks-libev rules_down @@ -145,7 +168,7 @@ if [ "$multipath_config" = "master" ]; then ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE else config_load shadowsocks-libev - config_foreach set_ss_route server + config_foreach set_ss_route server 1 fi if [ "$(uci -q get omr-bypass.defaults.ifname)" = "" ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 @@ -153,11 +176,13 @@ if [ "$multipath_config" = "master" ]; then fi multipath_config="on" else - local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}') - [ -n "$metric" ] && { - config_load shadowsocks-libev - config_foreach set_ss_route server $metric - } + if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then + local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}') + [ -n "$metric" ] && { + config_load shadowsocks-libev + config_foreach set_ss_route server $metric + } + fi fi if [ "$(uci -q get omr-bypass.defaults.ifname)" = "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show table 991337 | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 From 937e8d43ea2f762a6fe99bc254bbd7e1b5ca96f9 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 27 Jul 2018 23:28:38 +0200 Subject: [PATCH 277/307] no need to repeat tunnel down --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 27adfb46b..34db8e890 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -134,10 +134,10 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then config_foreach set_route interface $OMR_TRACKER_INTERFACE fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then - _log "Tunnel down" config_load shadowsocks-libev config_foreach del_ss_route server all if [ "$(uci -q show shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q show shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ]; then + _log "Tunnel down use ShadowSocks for UDP" uci -q set shadowsocks-libev.ss_rules.redir_udp='hi2' /etc/init.d/shadowsocks-libev rules_down /etc/init.d/shadowsocks-libev rules_up From ce9432d93b947c5a2b044f6fbeebb5cf0b86f905 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 30 Jul 2018 10:27:36 +0200 Subject: [PATCH 278/307] Fix adding network bypass --- luci-app-omr-bypass/luasrc/controller/omr-bypass.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua index 1ffbc1815..1af7a9b9e 100644 --- a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua +++ b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua @@ -17,7 +17,7 @@ function bypass_add() local ip_ipset = {} for _, k in pairs(hosts) do if k ~= "" then - if dt.ipaddr(k) then + if dt.ipmask(k) then table.insert(ip_ipset, k) else domains_ipset = domains_ipset .. '/' .. k From 110470cb85d0bd9791d45532da48fbfccc6c1aff Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 31 Jul 2018 17:18:00 +0200 Subject: [PATCH 279/307] Update to 18.06 --- luci-base/Makefile | 3 +- luci-base/htdocs/luci-static/resources/cbi.js | 24 ++- luci-base/htdocs/luci-static/resources/xhr.js | 19 +- luci-base/luasrc/dispatcher.lua | 15 +- luci-base/luasrc/model/uci.lua | 92 +++++++--- luci-base/luasrc/util.lua | 16 +- luci-base/luasrc/view/cbi/apply_widget.htm | 10 +- .../luasrc/view/cbi/cell_valueheader.htm | 6 +- luci-base/luasrc/view/cbi/map.htm | 15 -- luci-base/luasrc/view/cbi/ucisection.htm | 8 +- luci-base/luasrc/view/cbi/value.htm | 10 +- luci-base/luasrc/view/footer.htm | 25 ++- luci-base/po/ca/base.po | 3 - luci-base/po/cs/base.po | 3 - luci-base/po/de/base.po | 3 - luci-base/po/el/base.po | 3 - luci-base/po/en/base.po | 3 - luci-base/po/es/base.po | 3 - luci-base/po/fr/base.po | 3 - luci-base/po/he/base.po | 3 - luci-base/po/hu/base.po | 3 - luci-base/po/it/base.po | 3 - luci-base/po/ja/base.po | 3 - luci-base/po/ko/base.po | 3 - luci-base/po/ms/base.po | 3 - luci-base/po/no/base.po | 3 - luci-base/po/pl/base.po | 53 +++--- luci-base/po/pt-br/base.po | 3 - luci-base/po/pt/base.po | 3 - luci-base/po/ro/base.po | 3 - luci-base/po/ru/base.po | 3 - luci-base/po/sk/base.po | 3 - luci-base/po/sv/base.po | 3 - luci-base/po/templates/base.pot | 3 - luci-base/po/tr/base.po | 3 - luci-base/po/uk/base.po | 3 - luci-base/po/vi/base.po | 3 - luci-base/po/zh-cn/base.po | 171 +++++++++--------- luci-base/po/zh-tw/base.po | 3 - luci-base/src/po2lmo | Bin 0 -> 18576 bytes luci-base/src/po2lmo.o | Bin 0 -> 6376 bytes luci-base/src/template_lmo.o | Bin 0 -> 7200 bytes .../luasrc/controller/admin/uci.lua | 26 ++- .../model/cbi/admin_network/wifi_overview.lua | 6 +- .../admin_network/iface_overview_status.htm | 4 +- .../view/admin_network/iface_status.htm | 2 +- .../luasrc/view/admin_status/index.htm | 97 +++------- .../luasrc/view/admin_system/packages.htm | 4 +- .../luasrc/view/admin_uci/changes.htm | 10 +- .../luasrc/view/admin_uci/revert.htm | 11 +- 50 files changed, 335 insertions(+), 367 deletions(-) create mode 100755 luci-base/src/po2lmo create mode 100644 luci-base/src/po2lmo.o create mode 100644 luci-base/src/template_lmo.o diff --git a/luci-base/Makefile b/luci-base/Makefile index fc8a31d2a..9ce3b39f5 100644 --- a/luci-base/Makefile +++ b/luci-base/Makefile @@ -37,13 +37,14 @@ endef define Host/Compile $(MAKE) -C src/ clean po2lmo - $(MAKE) -C $(HOST_BUILD_DIR) bin/luasrcdiet endef define Host/Install $(INSTALL_DIR) $(1)/bin + $(INSTALL_DIR) $(1)/lib/lua/5.1 $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/luasrcdiet $(1)/bin/luasrcdiet + $(CP) $(HOST_BUILD_DIR)/luasrcdiet $(1)/lib/lua/5.1/ endef $(eval $(call HostBuild)) diff --git a/luci-base/htdocs/luci-static/resources/cbi.js b/luci-base/htdocs/luci-static/resources/cbi.js index 89dfac9e4..fcfc50694 100644 --- a/luci-base/htdocs/luci-static/resources/cbi.js +++ b/luci-base/htdocs/luci-static/resources/cbi.js @@ -627,6 +627,18 @@ function cbi_init() { s.parentNode.classList.add('cbi-tooltip-container'); }); + document.querySelectorAll('.cbi-section-remove > input[name^="cbi.rts"]').forEach(function(i) { + var handler = function(ev) { + var bits = this.name.split(/\./), + section = document.getElementById('cbi-' + bits[2] + '-' + bits[3]); + + section.style.opacity = (ev.type === 'mouseover') ? 0.5 : ''; + }; + + i.addEventListener('mouseover', handler); + i.addEventListener('mouseout', handler); + }); + cbi_d_update(); } @@ -818,9 +830,9 @@ function cbi_dynlist_init(parent, datatype, optional, choices) t.placeholder = holder; } - var b = document.createElement('img'); - b.src = cbi_strings.path.resource + ((i+1) < values.length ? '/cbi/remove.gif' : '/cbi/add.gif'); - b.className = 'cbi-image-button'; + var b = E('div', { + class: 'cbi-button cbi-button-' + ((i+1) < values.length ? 'remove' : 'add') + }, (i+1) < values.length ? '×' : '+'); parent.appendChild(t); parent.appendChild(b); @@ -986,8 +998,7 @@ function cbi_dynlist_init(parent, datatype, optional, choices) input = input.previousSibling; } - if (se.src.indexOf('remove') > -1) - { + if (se.classList.contains('cbi-button-remove')) { input.value = ''; cbi_dynlist_keydown({ @@ -995,8 +1006,7 @@ function cbi_dynlist_init(parent, datatype, optional, choices) keyCode: 8 }); } - else - { + else { cbi_dynlist_keydown({ target: input, keyCode: 13 diff --git a/luci-base/htdocs/luci-static/resources/xhr.js b/luci-base/htdocs/luci-static/resources/xhr.js index 62b525ebb..25a90e725 100644 --- a/luci-base/htdocs/luci-static/resources/xhr.js +++ b/luci-base/htdocs/luci-static/resources/xhr.js @@ -65,12 +65,8 @@ XHR = function() if (xhr.readyState == 4) { var json = null; if (xhr.getResponseHeader("Content-Type") == "application/json") { - try { - json = JSON.parse(xhr.responseText); - } - catch(e) { - json = null; - } + try { json = JSON.parse(xhr.responseText); } + catch(e) { json = null; } } callback(xhr, json, Date.now() - ts); @@ -90,8 +86,15 @@ XHR = function() xhr.onreadystatechange = function() { - if (xhr.readyState == 4) - callback(xhr, null, Date.now() - ts); + if (xhr.readyState == 4) { + var json = null; + if (xhr.getResponseHeader("Content-Type") == "application/json") { + try { json = JSON.parse(xhr.responseText); } + catch(e) { json = null; } + } + + callback(xhr, json, Date.now() - ts); + } } xhr.open('POST', url, true); diff --git a/luci-base/luasrc/dispatcher.lua b/luci-base/luasrc/dispatcher.lua index 6d5a8f4d3..6cf2712eb 100644 --- a/luci-base/luasrc/dispatcher.lua +++ b/luci-base/luasrc/dispatcher.lua @@ -893,8 +893,6 @@ local function _cbi(self, ...) local pageaction = true local parsechain = { } - local is_rollback, time_remaining = uci:rollback_pending() - for i, res in ipairs(maps) do if res.apply_needed and res.parsechain then local c @@ -921,8 +919,6 @@ local function _cbi(self, ...) for i, res in ipairs(maps) do res:render({ firstmap = (i == 1), - applymap = applymap, - confirmmap = (is_rollback and time_remaining or nil), redirect = redirect, messages = messages, pageaction = pageaction, @@ -932,11 +928,12 @@ local function _cbi(self, ...) if not config.nofooter then tpl.render("cbi/footer", { - flow = config, - pageaction = pageaction, - redirect = redirect, - state = state, - autoapply = config.autoapply + flow = config, + pageaction = pageaction, + redirect = redirect, + state = state, + autoapply = config.autoapply, + trigger_apply = applymap }) end end diff --git a/luci-base/luasrc/model/uci.lua b/luci-base/luasrc/model/uci.lua index 92c0d8f69..b2c1e463b 100644 --- a/luci-base/luasrc/model/uci.lua +++ b/luci-base/luasrc/model/uci.lua @@ -147,19 +147,31 @@ function apply(self, rollback) local _, err if rollback then + local sys = require "luci.sys" local conf = require "luci.config" - local timeout = tonumber(conf and conf.apply and conf.apply.rollback or "") or 0 + local timeout = tonumber(conf and conf.apply and conf.apply.rollback or 30) or 0 _, err = call("apply", { - timeout = (timeout > 30) and timeout or 30, + timeout = (timeout > 30) and timeout or 30, rollback = true }) if not err then + local now = os.time() + local token = sys.uniqueid(16) + util.ubus("session", "set", { - ubus_rpc_session = session_id, - values = { rollback = os.time() + timeout } + ubus_rpc_session = "00000000000000000000000000000000", + values = { + rollback = { + token = token, + session = session_id, + timeout = now + timeout + } + } }) + + return token end else _, err = call("changes", {}) @@ -184,40 +196,72 @@ function apply(self, rollback) return (err == nil), ERRSTR[err] end -function confirm(self) - local _, err = call("confirm", {}) - if not err then - util.ubus("session", "set", { - ubus_rpc_session = session_id, - values = { rollback = 0 } +function confirm(self, token) + local is_pending, time_remaining, rollback_sid, rollback_token = self:rollback_pending() + + if is_pending then + if token ~= rollback_token then + return false, "Permission denied" + end + + local _, err = util.ubus("uci", "confirm", { + ubus_rpc_session = rollback_sid }) + + if not err then + util.ubus("session", "set", { + ubus_rpc_session = "00000000000000000000000000000000", + values = { rollback = {} } + }) + end + + return (err == nil), ERRSTR[err] end - return (err == nil), ERRSTR[err] + + return false, "No data" end function rollback(self) - local _, err = call("rollback", {}) - if not err then - util.ubus("session", "set", { - ubus_rpc_session = session_id, - values = { rollback = 0 } + local is_pending, time_remaining, rollback_sid = self:rollback_pending() + + if is_pending then + local _, err = util.ubus("uci", "rollback", { + ubus_rpc_session = rollback_sid }) + + if not err then + util.ubus("session", "set", { + ubus_rpc_session = "00000000000000000000000000000000", + values = { rollback = {} } + }) + end + + return (err == nil), ERRSTR[err] end - return (err == nil), ERRSTR[err] + + return false, "No data" end function rollback_pending(self) - local deadline, err = util.ubus("session", "get", { - ubus_rpc_session = session_id, + local rv, err = util.ubus("session", "get", { + ubus_rpc_session = "00000000000000000000000000000000", keys = { "rollback" } }) - if type(deadline) == "table" and - type(deadline.values) == "table" and - type(deadline.values.rollback) == "number" and - deadline.values.rollback > os.time() + local now = os.time() + + if type(rv) == "table" and + type(rv.values) == "table" and + type(rv.values.rollback) == "table" and + type(rv.values.rollback.token) == "string" and + type(rv.values.rollback.session) == "string" and + type(rv.values.rollback.timeout) == "number" and + rv.values.rollback.timeout > now then - return true, deadline.values.rollback - os.time() + return true, + rv.values.rollback.timeout - now, + rv.values.rollback.session, + rv.values.rollback.token end return false, ERRSTR[err] diff --git a/luci-base/luasrc/util.lua b/luci-base/luasrc/util.lua index 10428b0b3..f16b3afb2 100644 --- a/luci-base/luasrc/util.lua +++ b/luci-base/luasrc/util.lua @@ -16,7 +16,7 @@ local _ubus = require "ubus" local _ubus_connection = nil local getmetatable, setmetatable = getmetatable, setmetatable -local rawget, rawset, unpack = rawget, rawset, unpack +local rawget, rawset, unpack, select = rawget, rawset, unpack, select local tostring, type, assert, error = tostring, type, assert, error local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring local require, pcall, xpcall = require, pcall, xpcall @@ -647,6 +647,17 @@ local ubus_codes = { "CONNECTION_FAILED" } +local function ubus_return(...) + if select('#', ...) == 2 then + local rv, err = select(1, ...), select(2, ...) + if rv == nil and type(err) == "number" then + return nil, err, ubus_codes[err] + end + end + + return ... +end + function ubus(object, method, data) if not _ubus_connection then _ubus_connection = _ubus.connect() @@ -657,8 +668,7 @@ function ubus(object, method, data) if type(data) ~= "table" then data = { } end - local rv, err = _ubus_connection:call(object, method, data) - return rv, err, ubus_codes[err] + return ubus_return(_ubus_connection:call(object, method, data)) elseif object then return _ubus_connection:signatures(object) else diff --git a/luci-base/luasrc/view/cbi/apply_widget.htm b/luci-base/luasrc/view/cbi/apply_widget.htm index f76846ee8..4d7e9c56e 100644 --- a/luci-base/luasrc/view/cbi/apply_widget.htm +++ b/luci-base/luasrc/view/cbi/apply_widget.htm @@ -1,4 +1,4 @@ -<% export("cbi_apply_widget", function(redirect_ok) -%> +<% export("cbi_apply_widget", function(redirect_ok, rollback_token) -%>