diff --git a/package/lean/luci-app-flowoffload/Makefile b/package/lean/luci-app-flowoffload/Makefile
index 876161666..cb281091f 100644
--- a/package/lean/luci-app-flowoffload/Makefile
+++ b/package/lean/luci-app-flowoffload/Makefile
@@ -9,7 +9,7 @@ LUCI_TITLE:=LuCI support for Flow Offload
LUCI_DEPENDS:=@LINUX_4_14
LUCI_PKGARCH:=all
PKG_VERSION:=1.0
-PKG_RELEASE:=2
+PKG_RELEASE:=5
include $(TOPDIR)/feeds/luci/luci.mk
diff --git a/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua b/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua
index 05713274b..54c2e3792 100644
--- a/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua
+++ b/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua
@@ -1,11 +1,36 @@
module("luci.controller.flowoffload", package.seeall)
function index()
- if not nixio.fs.access("/etc/config/flowoffload") then
+ if not nixio.fs.access("/etc/config/firewall") then
return
end
local page
page = entry({"admin", "network", "flowoffload"}, cbi("flowoffload"), _(" Flow Offload ACC"), 101)
page.i18n = "flowoffload"
page.dependent = true
+
+ entry({"admin", "network", "flowoffload", "status"}, call("action_status"))
end
+
+local function is_running()
+ return luci.sys.call("iptables --list | grep FLOWOFFLOAD >/dev/null") == 0
+end
+
+local function is_bbr()
+ return luci.sys.call("sysctl net.ipv4.tcp_congestion_control | grep bbr >/dev/null") == 0
+end
+
+local function is_fullcone()
+ return luci.sys.call("iptables -t nat -L -n --line-numbers | grep FULLCONENAT >/dev/null") == 0
+end
+
+function action_status()
+ luci.http.prepare_content("application/json")
+ luci.http.write_json({
+ run_state = is_running(),
+ down_state = is_bbr(),
+ up_state = is_fullcone()
+ })
+end
+
+
diff --git a/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua b/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua
index f0d5a730d..48a7c58ce 100644
--- a/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua
+++ b/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua
@@ -1,25 +1,25 @@
local m,s,o
local SYS = require "luci.sys"
-
-if SYS.call("iptables --list | grep FLOWOFFLOAD >/dev/null") == 0 then
- Status = translate("Linux Flow offload Forwarding Engine is Running")
-else
- Status = translate("Linux Flow offload Forwarding Engine is Not Running")
-end
-
-m = Map("flowoffload")
+m = Map("firewall")
m.title = translate("Linux Flow Offload Forwarding Engine Settings")
m.description = translate("Opensource Linux Flow Offload driver (Fast Path or HWNAT)")
+m:append(Template("flow/status"))
-s = m:section(TypedSection, "flowoffload", "")
+s = m:section(TypedSection, "defaults", "")
s.addremove = false
s.anonymous = true
-s.description = translate(string.format("%s
", Status))
-enable = s:option(Flag, "enabled", translate("Enable"))
-enable.default = 0
-enable.rmempty = false
+flow = s:option(Flag, "flow_offloading", translate("Enable"))
+flow.default = 0
+flow.rmempty = false
+flow.description = translate("Enable software flow offloading for connections. (decrease cpu load / increase routing throughput)")
+
+hw = s:option(Flag, "flow_offloading_hw", translate("HWNAT"))
+hw.default = 0
+hw.rmempty = false
+hw.description = translate("Enable Hardware NAT (depends on hw capability like MTK 762x)")
+
return m
diff --git a/package/lean/luci-app-flowoffload/luasrc/view/flow/status.htm b/package/lean/luci-app-flowoffload/luasrc/view/flow/status.htm
new file mode 100644
index 000000000..89aeccbef
--- /dev/null
+++ b/package/lean/luci-app-flowoffload/luasrc/view/flow/status.htm
@@ -0,0 +1,21 @@
+