diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/NptController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/NptController.php
index 61b1d5705..1f8f4819e 100644
--- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/NptController.php
+++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/NptController.php
@@ -37,7 +37,12 @@ class NptController extends FilterBaseController
$filter_funct = function ($record) use ($category) {
return empty($category) || array_intersect(explode(',', $record->categories), $category);
};
- return $this->searchBase("npt.rule", ['enabled', 'sequence', 'description'], "sequence", $filter_funct);
+ return $this->searchBase(
+ "npt.rule",
+ ['enabled', 'sequence', 'source_net', 'destination_net', 'description'],
+ "sequence",
+ $filter_funct
+ );
}
public function setRuleAction($uuid)
diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php
index 74c0479b3..461f990a5 100644
--- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php
+++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php
@@ -33,6 +33,17 @@ class FilterController extends \OPNsense\Base\IndexController
{
$this->view->pick('OPNsense/Firewall/filter');
$this->view->ruleController = "filter";
+ $this->view->gridFields = [
+ [
+ 'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled')
+ ],
+ [
+ 'id' => 'sequence','width' => '9em', 'heading' => gettext('Sequence')
+ ],
+ [
+ 'id' => 'description', 'heading' => gettext('Description')
+ ]
+ ];
$this->view->formDialogFilterRule = $this->getForm("dialogFilterRule");
}
}
diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php
index 07b1c7efd..50661eaae 100644
--- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php
+++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php
@@ -33,6 +33,25 @@ class NptController extends \OPNsense\Base\IndexController
{
$this->view->pick('OPNsense/Firewall/filter');
$this->view->ruleController = "npt";
+ $this->view->hideSavePointBtns = true;
+ $this->view->gridFields = [
+ [
+ 'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled')
+ ],
+ [
+ 'id' => 'sequence','width' => '9em', 'heading' => gettext('Sequence')
+ ],
+ [
+ 'id' => 'source_net', 'heading' => gettext('Internal IPv6 Prefix')
+ ],
+ [
+ 'id' => 'destination_net', 'heading' => gettext('External IPv6 Prefix')
+ ],
+ [
+ 'id' => 'description', 'heading' => gettext('Description')
+ ]
+ ];
+
$this->view->formDialogFilterRule = $this->getForm("dialogNptRule");
}
}
diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php
index 5b5927a06..7bc2c632f 100644
--- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php
+++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php
@@ -33,6 +33,17 @@ class SourceNatController extends \OPNsense\Base\IndexController
{
$this->view->pick('OPNsense/Firewall/filter');
$this->view->ruleController = "source_nat";
+ $this->view->gridFields = [
+ [
+ 'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled')
+ ],
+ [
+ 'id' => 'sequence','width' => '9em', 'heading' => gettext('Sequence')
+ ],
+ [
+ 'id' => 'description', 'heading' => gettext('Description')
+ ]
+ ];
$this->view->formDialogFilterRule = $this->getForm("dialogSNatRule");
}
}
diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogNptRule.xml b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogNptRule.xml
index fc9f7c66f..051dc4061 100644
--- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogNptRule.xml
+++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogNptRule.xml
@@ -17,14 +17,12 @@
rule.source_net
-
-
+
text
rule.destination_net
-
-
+
text
diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php
index ed631c16a..98edce4fd 100644
--- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php
+++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php
@@ -44,12 +44,7 @@ class Filter extends BaseModel
$messages = parent::performValidation($validateFullModel);
foreach ([$this->rules->rule, $this->snatrules->rule] as $rules) {
foreach ($rules->iterateItems() as $rule) {
- // validate changed rules
- $rule_changed = false;
- foreach ($rule->iterateItems() as $field) {
- $rule_changed = $rule_changed ? $rule_changed : $field->isFieldChanged();
- }
- if ($validateFullModel || $rule_changed) {
+ if ($validateFullModel || $rule->isFieldChanged()) {
// port / protocol validation
if (!empty((string)$rule->source_port) && !in_array($rule->protocol, ['TCP', 'UDP'])) {
$messages->appendMessage(new Message(
@@ -100,6 +95,19 @@ class Filter extends BaseModel
}
}
}
+ foreach ($this->npt->rule->iterateItems() as $rule) {
+ if ($validateFullModel || $rule->isFieldChanged()) {
+ $src_is_addr = Util::isSubnet($rule->source_net) || Util::isIpAddress($rule->source_net);
+ $src_proto = strpos($rule->source_net, ':') === false ? "inet" : "inet6";
+ if ($src_is_addr && $src_proto != 'inet6') {
+ $messages->appendMessage(new Message(
+ gettext("You can not use IPv4 addresses in IPv6 rules."),
+ $rule->source_net->__reference
+ ));
+ }
+
+ }
+ }
return $messages;
}
diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml
index ca30b9f98..e18a1caa7 100644
--- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml
+++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml
@@ -219,15 +219,29 @@
1
Y
+
+ 1
+ 99999
+ provide a valid sequence for sorting
+ Y
+ 1
+
Y
lan
Y
-
+
Y
+ ipv6
+ Y
+ N
-
+
+ ipv6
+ Y
+ N
+
diff --git a/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt b/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt
index d8caac9e6..717453fe9 100644
--- a/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt
+++ b/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt
@@ -179,9 +179,14 @@
| {{ lang._('ID') }} |
- {{ lang._('Enabled') }} |
- {{ lang._('Sequence') }} |
- {{ lang._('Description') }} |
+{% for fieldlist in gridFields %}
+ {{fieldlist['heading']|default('')}} |
+{% endfor %}
{{ lang._('Commands') }} |
@@ -208,7 +213,7 @@
data-error-title="{{ lang._('Filter load error') }}"
type="button"
>
-
+{% if not hideSavePointBtns|default(false) %}
+{% endif %}