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