• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
33 using System;
34 
35 namespace LwipSnmpCodeGeneration
36 {
37 	public static class LwipOpts
38 	{
39 		public static bool GenerateEmptyFolders = false;
40 		/// <summary>
41 		/// If a tree node only has scalar nodes as child nodes, it is replaced by
42 		/// a single scalar array node in order to save memory and have only one single get/test/set method for all scalars.
43 		/// </summary>
44 		public static bool GenerateScalarArrays = true;
45 		/// <summary>
46 		/// If a tree node has multiple scalars as subnodes as well as other treenodes it
47 		/// defines a single get/test/set method for all scalar child node.
48 		/// (without other treenodes as child it would have been converted to scalar array node).
49 		/// </summary>
50 		public static bool GenerateSingleAccessMethodsForTreeNodeScalars = GenerateScalarArrays;
51 	}
52 
53 	public static class LwipDefs
54 	{
55 		public const string Null        = "NULL";
56 		public const string Vt_U8       = "u8_t";
57 		public const string Vt_U16      = "u16_t";
58 		public const string Vt_U32      = "u32_t";
59 		public const string Vt_S8       = "s8_t";
60 		public const string Vt_S16      = "s16_t";
61 		public const string Vt_S32      = "s32_t";
62 		public const string Vt_Snmp_err = "snmp_err_t";
63 
64 		public const string Incl_SnmpOpts = "lwip/apps/snmp_opts.h";
65 		public const string Opt_SnmpEnabled = "LWIP_SNMP";
66 
67 		public const string Vt_StMib                = "struct snmp_mib";
68 		public const string Vt_StObjectId           = "struct snmp_obj_id";
69 		public const string Vt_StNode               = "struct snmp_node";
70 		public const string Vt_StNodeInstance       = "struct snmp_node_instance";
71 		public const string Vt_StTreeNode           = "struct snmp_tree_node";
72 		public const string Vt_StScalarNode         = "struct snmp_scalar_node";
73 		public const string Vt_StScalarArrayNode    = "struct snmp_scalar_array_node";
74 		public const string Vt_StScalarArrayNodeDef = "struct snmp_scalar_array_node_def";
75 		public const string Vt_StTableNode          = "struct snmp_table_node";
76 		public const string Vt_StTableColumnDef     = "struct snmp_table_col_def";
77 		public const string Vt_StNextOidState       = "struct snmp_next_oid_state";
78 
79 		public const string Def_NodeAccessReadOnly      = "SNMP_NODE_INSTANCE_READ_ONLY";
80 		public const string Def_NodeAccessReadWrite     = "SNMP_NODE_INSTANCE_READ_WRITE";
81 		public const string Def_NodeAccessWriteOnly     = "SNMP_NODE_INSTANCE_WRITE_ONLY";
82 		public const string Def_NodeAccessNotAccessible = "SNMP_NODE_INSTANCE_NOT_ACCESSIBLE";
83 
84 		public const string Def_ErrorCode_Ok             = "SNMP_ERR_NOERROR";
85 		public const string Def_ErrorCode_WrongValue     = "SNMP_ERR_WRONGVALUE";
86 		public const string Def_ErrorCode_NoSuchInstance = "SNMP_ERR_NOSUCHINSTANCE";
87 
88 		public const string FnctSuffix_GetValue        = "_get_value";
89 		public const string FnctSuffix_SetTest         = "_set_test";
90 		public const string FnctSuffix_SetValue        = "_set_value";
91 		public const string FnctSuffix_GetInstance     = "_get_instance";
92 		public const string FnctSuffix_GetNextInstance = "_get_next_instance";
93 
94 		public const string FnctName_SetTest_Ok         = "snmp_set_test_ok";
95 
GetLwipDefForSnmpAccessMode(SnmpAccessMode am)96 		public static string GetLwipDefForSnmpAccessMode(SnmpAccessMode am)
97 		{
98 			switch (am)
99 			{
100 				case SnmpAccessMode.ReadOnly: return Def_NodeAccessReadOnly;
101 				case SnmpAccessMode.ReadWrite: return Def_NodeAccessReadWrite;
102 				case SnmpAccessMode.NotAccessible: return Def_NodeAccessNotAccessible;
103 				case SnmpAccessMode.WriteOnly: return Def_NodeAccessWriteOnly;
104 				default: throw new NotSupportedException("Unknown SnmpAccessMode!");
105 			}
106 		}
107 
GetAsn1DefForSnmpDataType(SnmpDataType dt)108 		public static string GetAsn1DefForSnmpDataType(SnmpDataType dt)
109 		{
110 			switch (dt)
111 			{
112 				// primitive
113 				case SnmpDataType.Null:
114 					return "SNMP_ASN1_TYPE_NULL";
115 				case SnmpDataType.Bits:
116 				case SnmpDataType.OctetString:
117 					return "SNMP_ASN1_TYPE_OCTET_STRING";
118 				case SnmpDataType.ObjectIdentifier:
119 					return "SNMP_ASN1_TYPE_OBJECT_ID";
120 				case SnmpDataType.Integer:
121 					return "SNMP_ASN1_TYPE_INTEGER";
122 
123 				// application
124 				case SnmpDataType.IpAddress:
125 					return "SNMP_ASN1_TYPE_IPADDR";
126 				case SnmpDataType.Counter:
127 					return "SNMP_ASN1_TYPE_COUNTER";
128 				case SnmpDataType.Gauge:
129 					return "SNMP_ASN1_TYPE_GAUGE";
130 				case SnmpDataType.TimeTicks:
131 					return "SNMP_ASN1_TYPE_TIMETICKS";
132 				case SnmpDataType.Opaque:
133 					return "SNMP_ASN1_TYPE_OPAQUE";
134 				case SnmpDataType.Counter64:
135 					return "SNMP_ASN1_TYPE_COUNTER64";
136 				default:
137 					throw new NotSupportedException("Unknown SnmpDataType!");
138 			}
139 		}
140 
GetLengthForSnmpDataType(SnmpDataType dt)141 		public static string GetLengthForSnmpDataType(SnmpDataType dt)
142 		{
143 			switch (dt)
144 			{
145 				case SnmpDataType.Null:
146 					return "0";
147 
148 				case SnmpDataType.Integer:
149 				case SnmpDataType.Counter:
150 				case SnmpDataType.IpAddress:
151 				case SnmpDataType.Gauge:
152 				case SnmpDataType.TimeTicks:
153 					return "4";
154 
155 				case SnmpDataType.Counter64:
156 					return "8";
157 
158 				case SnmpDataType.OctetString:
159 				case SnmpDataType.ObjectIdentifier:
160 				case SnmpDataType.Bits:
161 				case SnmpDataType.Opaque:
162 					return null;
163 
164 				default:
165 					throw new NotSupportedException("Unknown SnmpDataType!");
166 			}
167 		}
168 	}
169 
170 	public enum SnmpDataType
171 	{
172 		Null,
173 
174 		Integer, // INTEGER, Integer32
175 
176 		Counter, // Counter, Counter32
177 		Gauge,  // Gauge, Gauge32, Unsigned32
178 		TimeTicks,
179 
180 		Counter64,
181 
182 		OctetString,
183 		Opaque,
184 		Bits,
185 
186 		ObjectIdentifier,
187 
188 		IpAddress,
189 	}
190 
191 	public enum SnmpAccessMode
192 	{
193 		ReadOnly,
194 		ReadWrite,
195 		WriteOnly,
196 		NotAccessible
197 	}
198 
199 }
200