From 880db92c404fb4842fa31439c174224da4fd245d Mon Sep 17 00:00:00 2001
From: sbwml <admin@cooluc.com>
Date: Fri, 25 Oct 2024 17:58:57 +0800
Subject: [PATCH 5/6] luci-app-firewall: add natflow offload support

Signed-off-by: sbwml <admin@cooluc.com>
---
 .../resources/view/firewall/zones.js          | 23 ++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js
index a1fb06d..447c42b 100644
--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js
+++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js
@@ -113,25 +113,38 @@ return view.extend({
 			if (L.hasSystemFeature('shortcutfe')) {
 				o.value('3', _("Shortcut-FE flow offloading"), _('Shortcut-FE based offloading for routing/NAT'));
 			}
+			if (L.hasSystemFeature('natflow')) {
+				o.value('4', _("Natflow offloading"), _('Natflow based offloading for routing/NAT'));
+			}
 			o.optional = false;
 			o.load = function (section_id) {
 				var flow_offloading = uci.get('firewall', section_id, 'flow_offloading');
 				var flow_offloading_hw = uci.get('firewall', section_id, 'flow_offloading_hw');
 				var shortcut_fe = uci.get('firewall', section_id, 'shortcut_fe');
+				var natflow = uci.get('firewall', section_id, 'natflow');
 				if (flow_offloading === '1') {
 					return flow_offloading_hw === '1' ? '2' : '1';
-				} else {
+				} else if (shortcut_fe === '1') {
 					return shortcut_fe === '1' ? '3' : '0';
+				} else if (natflow === '1'){
+					return natflow === '1' ? '4' : '0';
 				}
 			};
 			o.write = function(section_id, value) {
 				uci.unset('firewall', section_id, 'shortcut_fe');
+				uci.unset('firewall', section_id, 'natflow');
 				uci.set('firewall', section_id, 'flow_offloading', value === '0' ? null : '1');
 				uci.set('firewall', section_id, 'flow_offloading_hw', value === '2' ? '1' : null);
 				if (value === '3') {
 					uci.unset('firewall', section_id, 'flow_offloading');
 					uci.unset('firewall', section_id, 'flow_offloading_hw');
+					uci.unset('firewall', section_id, 'natflow');
 					uci.set('firewall', section_id, 'shortcut_fe', value === '3' ? '1' : null);
+				} else if (value === '4') {
+					uci.unset('firewall', section_id, 'flow_offloading');
+					uci.unset('firewall', section_id, 'flow_offloading_hw');
+					uci.unset('firewall', section_id, 'shortcut_fe');
+					uci.set('firewall', section_id, 'natflow', value === '4' ? '1' : null);
 				}
 			};
 
@@ -143,6 +156,14 @@ return view.extend({
 			o.value('fast-classifier', _('fast-classifier'));
 			o.default = 'shortcut-fe-cm';
 			o.depends('offloading_type', '3');
+
+			/* Natflow delay packet */
+			o = s.option(form.Value, 'natflow_delay_pkts',
+			_('Natflow delay packet'),
+			_('Set up the natflow delay packet'));
+			o.datatype = 'and(uinteger,min(0))';
+			o.default = 4;
+			o.depends('offloading_type', '4');
 		}
 
 
-- 
2.42.0

