46snmp_err_t snmp_table_get_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance *
instance)
48 snmp_err_t
ret = SNMP_ERR_NOSUCHINSTANCE;
49 const struct snmp_table_node *table_node = (
const struct snmp_table_node *)(
const void *)
instance->node;
56 if ((
instance->instance_oid.len >= 3) && (
instance->instance_oid.id[0] == 1)) {
58 const struct snmp_table_col_def *col_def = table_node->columns;
59 u16_t i = table_node->column_count;
61 if (col_def->index ==
instance->instance_oid.id[1]) {
71 instance->asn1_type = col_def->asn1_type;
73 instance->get_value = table_node->get_value;
74 instance->set_test = table_node->set_test;
75 instance->set_value = table_node->set_value;
77 ret = table_node->get_cell_instance(
88snmp_err_t snmp_table_get_next_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance *
instance)
90 const struct snmp_table_node *table_node = (
const struct snmp_table_node *)(
const void *)
instance->node;
91 const struct snmp_table_col_def *col_def;
92 struct snmp_obj_id row_oid;
100 if ((
instance->instance_oid.len > 0) && (
instance->instance_oid.id[0] > 1)) {
101 return SNMP_ERR_NOSUCHINSTANCE;
103 if (
instance->instance_oid.len > 1) {
106 if (
instance->instance_oid.len > 2) {
107 snmp_oid_assign(&row_oid, &(
instance->instance_oid.id[2]),
instance->instance_oid.len - 2);
112 instance->get_value = table_node->get_value;
113 instance->set_test = table_node->set_test;
114 instance->set_value = table_node->set_value;
119 const struct snmp_table_col_def *next_col_def =
NULL;
120 col_def = table_node->columns;
122 for (
i = 0;
i < table_node->column_count;
i++) {
123 if (col_def->index ==
column) {
124 next_col_def = col_def;
126 }
else if ((col_def->index >
column) && ((next_col_def ==
NULL) || (col_def->index < next_col_def->index))) {
127 next_col_def = col_def;
132 if (next_col_def ==
NULL) {
134 return SNMP_ERR_NOSUCHINSTANCE;
137 instance->asn1_type = next_col_def->asn1_type;
138 instance->access = next_col_def->access;
140 result = table_node->get_next_cell_instance(
141 &next_col_def->index,
145 if (
result == SNMP_ERR_NOERROR) {
146 col_def = next_col_def;
151 column = next_col_def->index + 1;
157 instance->instance_oid.id[1] = col_def->index;
158 snmp_oid_append(&
instance->instance_oid, row_oid.id, row_oid.len);
160 return SNMP_ERR_NOERROR;
164snmp_err_t snmp_table_simple_get_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance *
instance)
166 snmp_err_t
ret = SNMP_ERR_NOSUCHINSTANCE;
167 const struct snmp_table_simple_node *table_node = (
const struct snmp_table_simple_node *)(
const void *)
instance->node;
174 if ((
instance->instance_oid.len >= 3) && (
instance->instance_oid.id[0] == 1)) {
175 ret = table_node->get_cell_value(
182 if (
ret == SNMP_ERR_NOERROR) {
184 const struct snmp_table_simple_col_def *col_def = table_node->columns;
185 u32_t i = table_node->column_count;
187 if (col_def->index ==
instance->instance_oid.id[1]) {
196 instance->asn1_type = col_def->asn1_type;
197 instance->access = SNMP_NODE_INSTANCE_READ_ONLY;
201 switch (col_def->data_type) {
202 case SNMP_VARIANT_VALUE_TYPE_U32:
203 instance->get_value = snmp_table_extract_value_from_u32ref;
205 case SNMP_VARIANT_VALUE_TYPE_S32:
206 instance->get_value = snmp_table_extract_value_from_s32ref;
208 case SNMP_VARIANT_VALUE_TYPE_PTR:
209 case SNMP_VARIANT_VALUE_TYPE_CONST_PTR:
210 instance->get_value = snmp_table_extract_value_from_refconstptr;
213 LWIP_DEBUGF(
SNMP_DEBUG, (
"snmp_table_simple_get_instance(): unknown column data_type: %d\n", col_def->data_type));
214 return SNMP_ERR_GENERROR;
217 ret = SNMP_ERR_NOERROR;
219 ret = SNMP_ERR_NOSUCHINSTANCE;
227snmp_err_t snmp_table_simple_get_next_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance *
instance)
229 const struct snmp_table_simple_node *table_node = (
const struct snmp_table_simple_node *)(
const void *)
instance->node;
230 const struct snmp_table_simple_col_def *col_def;
231 struct snmp_obj_id row_oid;
239 if ((
instance->instance_oid.len > 0) && (
instance->instance_oid.id[0] > 1)) {
240 return SNMP_ERR_NOSUCHINSTANCE;
242 if (
instance->instance_oid.len > 1) {
245 if (
instance->instance_oid.len > 2) {
246 snmp_oid_assign(&row_oid, &(
instance->instance_oid.id[2]),
instance->instance_oid.len - 2);
254 const struct snmp_table_simple_col_def *next_col_def =
NULL;
255 col_def = table_node->columns;
257 for (
i = 0;
i < table_node->column_count;
i++) {
258 if (col_def->index ==
column) {
259 next_col_def = col_def;
261 }
else if ((col_def->index >
column) && ((next_col_def ==
NULL) ||
262 (col_def->index < next_col_def->index))) {
263 next_col_def = col_def;
268 if (next_col_def ==
NULL) {
270 return SNMP_ERR_NOSUCHINSTANCE;
273 result = table_node->get_next_cell_instance_and_value(
274 &next_col_def->index,
279 if (
result == SNMP_ERR_NOERROR) {
280 col_def = next_col_def;
285 column = next_col_def->index + 1;
288 instance->asn1_type = col_def->asn1_type;
289 instance->access = SNMP_NODE_INSTANCE_READ_ONLY;
293 switch (col_def->data_type) {
294 case SNMP_VARIANT_VALUE_TYPE_U32:
295 instance->get_value = snmp_table_extract_value_from_u32ref;
297 case SNMP_VARIANT_VALUE_TYPE_S32:
298 instance->get_value = snmp_table_extract_value_from_s32ref;
300 case SNMP_VARIANT_VALUE_TYPE_PTR:
301 case SNMP_VARIANT_VALUE_TYPE_CONST_PTR:
302 instance->get_value = snmp_table_extract_value_from_refconstptr;
305 LWIP_DEBUGF(
SNMP_DEBUG, (
"snmp_table_simple_get_instance(): unknown column data_type: %d\n", col_def->data_type));
306 return SNMP_ERR_GENERROR;
312 instance->instance_oid.id[1] = col_def->index;
313 snmp_oid_append(&
instance->instance_oid, row_oid.id, row_oid.len);
315 return SNMP_ERR_NOERROR;
320snmp_table_extract_value_from_s32ref(
struct snmp_node_instance *
instance,
void *
value)
328snmp_table_extract_value_from_u32ref(
struct snmp_node_instance *
instance,
void *
value)
336snmp_table_extract_value_from_refconstptr(
struct snmp_node_instance *
instance,
void *
value)
static HINSTANCE instance
#define LWIP_DEBUGF(debug, message)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define LWIP_UNUSED_ARG(x)
#define MEMCPY(DST, SRC, BYTES)