From 658e3d00924a857d8db9acda4f90d8d2d97ccb50 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 21 Jun 2019 10:54:58 +0200 Subject: [PATCH] Netflow, WAN|Egress interfaces should be in All / Listening interfaces list. for https://github.com/opnsense/core/issues/3547 --- .../models/OPNsense/Diagnostics/Netflow.php | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.php b/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.php index 619d0e616..a7df8a4d6 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.php +++ b/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.php @@ -36,4 +36,38 @@ use OPNsense\Base\BaseModel; */ class Netflow extends BaseModel { + /** + * {@inheritdoc} + */ + public function performValidation($validateFullModel = false) + { + // standard model validations + $messages = parent::performValidation($validateFullModel); + // extended validations + foreach ($this->getFlatNodes() as $key => $node) { + if ($validateFullModel || $node->isFieldChanged()) { + $parentNode = $node->getParentNode(); + $ptagname = $parentNode->getInternalXMLTagName(); + $tagname = $node->getInternalXMLTagName(); + if ($ptagname == 'capture' && in_array($tagname, array('interfaces', 'egress_only'))) { + $intf_list = explode(',', (string)$parentNode->interfaces); + $egress_list = explode(',', (string)$parentNode->egress_only); + $missing = array(); + foreach ($egress_list as $egress_item) { + if (!in_array($egress_item, $intf_list)) { + $missing[] = $egress_item; + } + } + if (!empty($missing)) { + $messages->appendMessage(new \Phalcon\Validation\Message( + sprintf(gettext("Egress interface(s) [%s] missing in listening interfaces"), + implode(',', $missing)), + $key + )); + } + } + } + } + return $messages; + } }