SnmpMib.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without modification,
  6. * are permitted provided that the following conditions are met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright notice,
  9. * this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright notice,
  11. * this list of conditions and the following disclaimer in the documentation
  12. * and/or other materials provided with the distribution.
  13. * 3. The name of the author may not be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
  17. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  18. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
  19. * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  20. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  21. * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  22. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  23. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  24. * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  25. * OF SUCH DAMAGE.
  26. *
  27. * This file is part of the lwIP TCP/IP stack.
  28. *
  29. * Author: Martin Hentschel <info@cl-soft.de>
  30. *
  31. */
  32. using System;
  33. using System.Text;
  34. using CCodeGeneration;
  35. namespace LwipSnmpCodeGeneration
  36. {
  37. public class SnmpMib : SnmpTreeNode
  38. {
  39. public uint[] BaseOid { get; set; }
  40. public SnmpMib()
  41. : base(null)
  42. {
  43. }
  44. public SnmpMib(uint[] baseOid)
  45. : base(null)
  46. {
  47. this.BaseOid = baseOid;
  48. }
  49. public override string FullNodeName
  50. {
  51. get { return this.Name.ToLowerInvariant() + "_root"; }
  52. }
  53. public override void GenerateCode(MibCFile mibFile)
  54. {
  55. base.GenerateCode(mibFile);
  56. System.Diagnostics.Debug.Assert((this.BaseOid != null) && (this.BaseOid.Length > 0));
  57. // create and add BaseOID declarations
  58. StringBuilder boidInitialization = new StringBuilder("{");
  59. foreach (uint t in this.BaseOid)
  60. {
  61. boidInitialization.Append(t);
  62. boidInitialization.Append(",");
  63. }
  64. boidInitialization.Length -= 1;
  65. boidInitialization.Append("}");
  66. VariableDeclaration boidDecl = new VariableDeclaration(
  67. new VariableType(this.Name.ToLowerInvariant() + "_base_oid", LwipDefs.Vt_U32, null, ConstType.Value, String.Empty),
  68. boidInitialization.ToString(), true);
  69. mibFile.Declarations.Add(boidDecl);
  70. mibFile.Declarations.Add(GetExportDeclaration());
  71. }
  72. public override void GenerateHeaderCode(MibHeaderFile mibHeaderFile)
  73. {
  74. mibHeaderFile.Includes.Add(new PP_Include("lwip/apps/snmp_core.h"));
  75. mibHeaderFile.VariableDeclarations.Add(VariablePrototype.FromVariableDeclaration(GetExportDeclaration()));
  76. }
  77. VariableDeclaration GetExportDeclaration()
  78. {
  79. return new VariableDeclaration(
  80. new VariableType(this.Name.ToLowerInvariant(), LwipDefs.Vt_StMib, null, ConstType.Value),
  81. String.Format("{{{0}_base_oid, LWIP_ARRAYSIZE({0}_base_oid), &{1}.node}}", this.Name.ToLowerInvariant(), this.FullNodeName));
  82. }
  83. }
  84. }