luci-app-firewall: allow ipv6 setup
[project/luci.git] / applications / luci-app-firewall / htdocs / luci-static / resources / tools / firewall.js
index 03e505e89d3296a233f133715b073069d9ac079e..ec0ee369ea7c3c9f55cd7d8be290d258ae043f83 100644 (file)
@@ -477,18 +477,20 @@ return baseclass.extend({
 
        addLocalIPOption: function(s, tab, name, label, description, devices) {
                var o = s.taboption(tab, form.Value, name, label, description);
+               var fw4 = L.hasSystemFeature('firewall4');
 
                o.modalonly = true;
-               o.datatype = 'ip4addr("nomask")';
+               o.datatype = !fw4?'ip4addr("nomask")':'ipaddr("nomask")';
                o.placeholder = _('any');
 
                L.sortedKeys(devices, 'name').forEach(function(dev) {
                        var ip4addrs = devices[dev].ipaddrs;
+                       var ip6addrs = devices[dev].ip6addrs;
 
-                       if (!L.isObject(devices[dev].flags) || !Array.isArray(ip4addrs) || devices[dev].flags.loopback)
+                       if (!L.isObject(devices[dev].flags) || devices[dev].flags.loopback)
                                return;
 
-                       for (var i = 0; i < ip4addrs.length; i++) {
+                       for (var i = 0; Array.isArray(ip4addrs) && i < ip4addrs.length; i++) {
                                if (!L.isObject(ip4addrs[i]) || !ip4addrs[i].address)
                                        continue;
 
@@ -496,6 +498,14 @@ return baseclass.extend({
                                        ip4addrs[i].address, ' (', E('strong', {}, [dev]), ')'
                                ]));
                        }
+                       for (var i = 0; fw4 && Array.isArray(ip6addrs) && i < ip6addrs.length; i++) {
+                               if (!L.isObject(ip6addrs[i]) || !ip6addrs[i].address)
+                                       continue;
+
+                               o.value(ip6addrs[i].address, E([], [
+                                       ip6addrs[i].address, ' (', E('strong', {}, [dev]), ')'
+                               ]));
+                       }
                });
 
                return o;