LwipMibCompiler: Remove false positive root entities

This commit is contained in:
Jan Breuer 2016-03-10 09:17:10 +01:00 committed by Dirk Ziegelmeier
parent dfc963880a
commit 588b11185a

View File

@ -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<IEntity> entities, string name) {
foreach(IEntity entity in entities) {
if (entity.Name == name) {
return true;
}
}
return false;
}
private void FilterRealRoots(IList<MibTreeNode> root, IList<IEntity> 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<IEntity> entities)
{