mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-03-12 13:13:21 +00:00
SNMP MIB compiler: Add ability to generate UDP-MIB and TCP-MIB
This commit is contained in:
parent
b9d0d80946
commit
713deba83f
@ -102,31 +102,34 @@ namespace LwipMibCompiler
|
||||
MibTypesResolver.ResolveTypes(md.Modules[0]);
|
||||
MibTree mt = new MibTree(md.Modules[0] as MibModule);
|
||||
|
||||
if (mt.Root == null)
|
||||
if (mt.Root.Count == 0)
|
||||
{
|
||||
Console.WriteLine("No root element found inside MIB!");
|
||||
return;
|
||||
}
|
||||
|
||||
MibCFile generatedFile = new MibCFile();
|
||||
MibHeaderFile generatedHeaderFile = new MibHeaderFile();
|
||||
|
||||
foreach (MibTreeNode mibTreeNode in mt.Root)
|
||||
{
|
||||
// create LWIP object tree from MIB structure
|
||||
Console.WriteLine(" Creating lwIP object tree...");
|
||||
Console.WriteLine(" Creating lwIP object tree " + mibTreeNode.Entity.Name);
|
||||
|
||||
SnmpMib snmpMib = new SnmpMib();
|
||||
snmpMib.Oid = mt.Root.Entity.Value;
|
||||
snmpMib.BaseOid = (int[])(object)MibTypesResolver.ResolveOid(mt.Root.Entity).GetOidValues();
|
||||
snmpMib.Name = _alphaNumericRegex.Replace(md.Modules[0].Name, "").ToLowerInvariant();
|
||||
snmpMib.Oid = mibTreeNode.Entity.Value;
|
||||
snmpMib.BaseOid = (int[])(object)MibTypesResolver.ResolveOid(mibTreeNode.Entity).GetOidValues();
|
||||
snmpMib.Name = mibTreeNode.Entity.Name;
|
||||
|
||||
ProcessMibTreeNode(mt.Root, snmpMib);
|
||||
ProcessMibTreeNode(mibTreeNode, snmpMib);
|
||||
|
||||
// let the tree transform itself depending on node structure
|
||||
snmpMib.Analyze();
|
||||
|
||||
// generate code from LWIP object tree
|
||||
Console.WriteLine(" Generating code files...");
|
||||
MibCFile generatedFile = new MibCFile();
|
||||
MibHeaderFile generatedHeaderFile = new MibHeaderFile();
|
||||
Console.WriteLine(" Generating code " + snmpMib.Name);
|
||||
snmpMib.Generate(generatedFile, generatedHeaderFile);
|
||||
}
|
||||
|
||||
string preservedCode = MibCFile.GetPreservedCode(destFile);
|
||||
if (!string.IsNullOrEmpty(preservedCode))
|
||||
|
@ -163,7 +163,7 @@ namespace LwipSnmpCodeGeneration
|
||||
// check if we can merge this node to a scalar array node (all childs need to be scalars)
|
||||
if (this.childNodes.Count > 0)
|
||||
{
|
||||
if (LwipOpts.GenerateScalarArrays && (this.childScalarNodes.Count == this.childNodes.Count))
|
||||
if (LwipOpts.GenerateScalarArrays && (this.childScalarNodes.Count == this.childNodes.Count) && (this.ParentNode != null))
|
||||
{
|
||||
SnmpScalarArrayNode scalarArrayNode = new SnmpScalarArrayNode(this.childScalarNodes, this.ParentNode);
|
||||
scalarArrayNode.Oid = this.Oid;
|
||||
|
@ -1,7 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using Lextm.SharpSnmpLib.Mib.Elements.Entities;
|
||||
|
||||
namespace Lextm.SharpSnmpLib.Mib
|
||||
@ -11,7 +8,7 @@ namespace Lextm.SharpSnmpLib.Mib
|
||||
/// </summary>
|
||||
public class MibTree
|
||||
{
|
||||
private MibTreeNode _root = null;
|
||||
private readonly List<MibTreeNode> _root = new List<MibTreeNode>();
|
||||
|
||||
public MibTree(MibModule module)
|
||||
{
|
||||
@ -27,24 +24,48 @@ namespace Lextm.SharpSnmpLib.Mib
|
||||
if (mi != null)
|
||||
{
|
||||
entities.Remove(element);
|
||||
_root = new MibTreeNode(null, mi);
|
||||
_root.Add(new MibTreeNode(null, mi));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_root == null)
|
||||
// gather all items below ModuleIdentity
|
||||
foreach (MibTreeNode mibTreeNode in _root)
|
||||
{
|
||||
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;
|
||||
|
||||
if (oa != null)
|
||||
{
|
||||
entities.Remove(element);
|
||||
_root.Add(new MibTreeNode(null, oa));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_root.Count == 0)
|
||||
{
|
||||
//no module identity, assume first entity is root
|
||||
_root = new MibTreeNode(null, entities[0]);
|
||||
_root.Add(new MibTreeNode(null, entities[0]));
|
||||
entities.RemoveAt(0);
|
||||
}
|
||||
|
||||
BuildTree(_root, entities);
|
||||
UpdateTreeNodeTypes(_root);
|
||||
foreach (MibTreeNode mibTreeNode in _root)
|
||||
{
|
||||
BuildTree(mibTreeNode, entities);
|
||||
UpdateTreeNodeTypes(mibTreeNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MibTreeNode Root
|
||||
public IList<MibTreeNode> Root
|
||||
{
|
||||
get { return _root; }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user