mod-admin-full: Add IPv6 Prefix Delegation information to Status Pages
authorCody R. Brown <dev@codybrown.ca>
Sat, 28 Jan 2017 09:38:06 +0000 (01:38 -0800)
committerHannu Nyman <hannu.nyman@iki.fi>
Mon, 20 Feb 2017 14:48:19 +0000 (16:48 +0200)
The Overview page and Network>Interfaces page currently do not give much
information about IPv6, particularly with Prefix Delegated setups. In these
setups, ISP will delegate a prefix to the router. Currently LuCI doesn't display
this Prefix Delegation from the ISP anywhere. A number of changes was added
to this commit:

1) self:_ubus("ipv6-prefix") was extracted and put into protocol.ip6prefix.
2) Network>Interfaces page, if a .ip6prefix is present, show it under Status.
   (IPv6-PD).
3) On the Overview page, "Type" and "Prefix Delegated" has been added to
  the IPv6 Network Overview Status:
  - Type will display the .proto, similar to the IPv4 case.
    If a .ip6prefix is present, it'll display a "-pd" at the end of
    the Type: i.e. dhcpv6-pd vs. dhcpv6.
  - If no .ip6prefix is present, it'll do what it does currently, and
    just show Address, or :: if no address is present.
  - If .ip6prefix is present, it'll show the "Prefix Delegated", it'll also
    hide "Address" if no address is present, else it'll show ifc6.ip6addr as well.

Signed-off-by: Cody R. Brown <dev@codybrown.ca>
(cherry picked from commit 5377d22b4a8d8f2234ddb5e65783343a6f2f6897)
(commit message reformatted)

modules/luci-base/luasrc/model/network.lua
modules/luci-mod-admin-full/luasrc/controller/admin/network.lua
modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm

index 2d8336bf33ab5c194dc659526835178aa75ef579..49d91b875aedbe5e2e6ae7ad6166595e03159401 100644 (file)
@@ -950,6 +950,13 @@ function protocol.dns6addrs(self)
        return dns
 end
 
+function protocol.ip6prefix(self)
+       local prefix = self:_ubus("ipv6-prefix")
+       if prefix and #prefix > 0 then
+               return "%s/%d" %{ prefix[1].address, prefix[1].mask }
+       end
+end
+
 function protocol.is_bridge(self)
        return (not self:is_virtual() and self:type() == "bridge")
 end
index 3b5f3eb8de89cfd3a96b7bd978583899b42930a0..2cb2108b9f6c895bcbca736caeb799e578910516 100644 (file)
@@ -238,6 +238,7 @@ function iface_status(ifaces)
                                ipaddrs    = net:ipaddrs(),
                                ip6addrs   = net:ip6addrs(),
                                dnsaddrs   = net:dnsaddrs(),
+                               ip6prefix  = net:ip6prefix(),
                                name       = device:shortname(),
                                type       = device:type(),
                                ifname     = device:name(),
index 646d931f37eeb2b04efd28a8994aa81e2d33a77c..2512a35b3cdfd5ebf9f0c11b1764f651f0e6b0ac 100644 (file)
                                                                        ifc.ip6addrs[i]
                                                                );
                                                }
+                                               
+                                               if (ifc.ip6prefix)
+                                               {
+                                                       html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix);
+                                               }
 
                                                d.innerHTML = html;
                                        }
index 8c3b1abcc756eceede506f8ed3b34d69b4fe34c5..b15dd13f39512c8ab45698564272ff3c42d2f506 100644 (file)
                                                                ifc.ip6addrs[i]
                                                        );
                                        }
+                                       
+                                       if (ifc.ip6prefix)
+                                       {
+                                               html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix);
+                                       }
 
                                        d.innerHTML = html;
                                }
index 8976e30cba3ef0ee08e8dbdd4c4921b2d8800488..206f9ef82af90f6508f7cfc705efd4734e3d92cb 100644 (file)
 
                if wan6 then
                        rv.wan6 = {
-                               ip6addr = wan6:ip6addr(),
-                               gw6addr = wan6:gw6addr(),
-                               dns     = wan6:dns6addrs(),
-                               uptime  = wan6:uptime(),
-                               ifname  = wan6:ifname(),
-                               link    = wan6:adminlink()
+                               ip6addr   = wan6:ip6addr(),
+                               gw6addr   = wan6:gw6addr(),
+                               dns       = wan6:dns6addrs(),
+                               ip6prefix = wan6:ip6prefix(),
+                               uptime    = wan6:uptime(),
+                               proto     = wan6:proto(),
+                               ifname    = wan6:ifname(),
+                               link      = wan6:adminlink()
                        }
                end
 
                        if (ifc6 && ifc6.ifname && ifc6.proto != 'none')
                        {
                                var s = String.format(
-                                       '<strong><%:Address%>: </strong>%s<br />' +
+                                       '<strong><%:Type%>: </strong>%s%s<br />',
+                                               ifc6.proto, (ifc6.ip6prefix) ? '-pd' : ''
+                               );
+                               
+                               if (!ifc6.ip6prefix)
+                               {
+                                       s += String.format(
+                                               '<strong><%:Address%>: </strong>%s<br />',
+                                               (ifc6.ip6addr) ? ifc6.ip6addr : '::'
+                                       );
+                               }
+                               else
+                               {
+                                       s += String.format(
+                                               '<strong><%:Prefix Delegated%>: </strong>%s<br />',
+                                               ifc6.ip6prefix
+                                       );
+                                       if (ifc6.ip6addr)
+                                       {
+                                               s += String.format(
+                                                       '<strong><%:Address%>: </strong>%s<br />',
+                                                       ifc6.ip6addr
+                                               );
+                                       }
+                               }
+
+                               s += String.format(
                                        '<strong><%:Gateway%>: </strong>%s<br />',
-                                               (ifc6.ip6addr) ? ifc6.ip6addr : '::',
                                                (ifc6.gw6addr) ? ifc6.gw6addr : '::'
                                );