Add support for showing ipv6 NAT table in Luci
authorHannu Nyman <hannu.nyman@iki.fi>
Fri, 3 Jun 2016 07:27:07 +0000 (10:27 +0300)
committerHannu Nyman <hannu.nyman@iki.fi>
Fri, 3 Jun 2016 07:30:17 +0000 (10:30 +0300)
When kmod-nf-nat6 and kmod-ipt-nat6 are installed, the firewall has also
the 'nat' table for ipv6, and packages like 'adblock' utilize that table.

Currently that table is not shown on the Luci firewall status page,
although it is visible by 'ip6tables -L -v -t nat' from console.

Detect 'nat' table's presence from /proc/net/ip6_tables_names

Show 'nat' table in Status->Firewall->IPv6 if that table is present.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit a77ff30057c691009dac646adbac28d6230814b6)

modules/luci-base/luasrc/sys/iptparser.lua
modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm

index 2b81e0ee3893e7eca71022c9bc7792caecd32ffe..a9dbc308263143dfc16cf2b9bcc5288abc0e8df3 100644 (file)
@@ -19,6 +19,8 @@ luci.util   = require "luci.util"
 luci.sys    = require "luci.sys"
 luci.ip     = require "luci.ip"
 
+local pcall = pcall
+local io = require "io"
 local tonumber, ipairs, table = tonumber, ipairs, table
 
 module("luci.sys.iptparser")
@@ -37,6 +39,15 @@ function IptParser.__init__( self, family )
        else
                self._nulladdr = "::/0"
                self._tables   = { "filter", "mangle", "raw" }
+               local ok, lines = pcall(io.lines, "/proc/net/ip6_tables_names")
+               if ok and lines then
+                       local line
+                       for line in lines do
+                               if line == "nat" then
+                                       self._tables = { "filter", "nat", "mangle", "raw" }
+                               end
+                       end
+               end
                self._command  = "ip6tables -t %s --line-numbers -nxvL"
        end
 
index ba2933adef51298f810e883a0b3d9a3cf8895da9..6553d7d752f56bb4601c5c72373b5c04dc40be3d 100644 (file)
@@ -9,6 +9,7 @@
        require "luci.sys.iptparser"
        local wba = require "luci.tools.webadmin"
        local fs = require "nixio.fs"
+       local io = require "io"
 
        local has_ip6tables = fs.access("/usr/sbin/ip6tables")
        local mode = 4
        local tables = { "Filter", "NAT", "Mangle", "Raw" }
        if mode == 6 then
                tables = { "Filter", "Mangle", "Raw" }
+               local ok, lines = pcall(io.lines, "/proc/net/ip6_tables_names")
+               if ok and lines then
+                       local line
+                       for line in lines do
+                               if line == "nat" then
+                                       tables = { "Filter", "NAT", "Mangle", "Raw" }
+                               end
+                       end
+               end
        end
 -%>