From 588b11185a5da28ac734ee5fb6ea102acfb15fe1 Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Thu, 10 Mar 2016 09:17:10 +0100 Subject: [PATCH] LwipMibCompiler: Remove false positive root entities --- .../SharpSnmpLib/Mib/MibTree.cs | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs b/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs index 76101aa3..dea12730 100644 --- a/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs +++ b/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs @@ -27,16 +27,7 @@ namespace Lextm.SharpSnmpLib.Mib } } - // gather all items below ModuleIdentity - foreach (MibTreeNode mibTreeNode in _root) - { - entities.Remove (mibTreeNode.Entity); - BuildTree(mibTreeNode, entities); - UpdateTreeNodeTypes(mibTreeNode); - } - // find OID assignments as root, if there are any that are not below ModuleIdentity - // FIXME: There may be multiple OID assignments that create a tree (find the root ones!) foreach (IEntity element in entities) { OidValueAssignment oa = element as OidValueAssignment; @@ -47,6 +38,13 @@ namespace Lextm.SharpSnmpLib.Mib } } + FilterRealRoots (_root, entities); + + foreach (MibTreeNode mibTreeNode in _root) + { + entities.Remove (mibTreeNode.Entity); + } + if (_root.Count == 0) { //no module identity, assume first entity is root @@ -70,6 +68,29 @@ namespace Lextm.SharpSnmpLib.Mib get { return _root; } } + private bool EntityExists(IList entities, string name) { + foreach(IEntity entity in entities) { + if (entity.Name == name) { + return true; + } + } + return false; + } + + private void FilterRealRoots(IList root, IList entities) + { + int i = 0; + while (i < _root.Count) { + if (EntityExists(entities, _root[i].Entity.Parent)) + { + _root.RemoveAt(i); + } + else + { + i++; + } + } + } private void BuildTree(MibTreeNode node, IList entities) {