40 static u16_t snmp_scalar_array_get_value(
struct snmp_node_instance* instance,
void* value);
41 static snmp_err_t snmp_scalar_array_set_test(
struct snmp_node_instance* instance,
u16_t value_len,
void* value);
42 static snmp_err_t snmp_scalar_array_set_value(
struct snmp_node_instance* instance,
u16_t value_len,
void* value);
45 snmp_scalar_get_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance* instance)
47 const struct snmp_scalar_node* scalar_node = (
const struct snmp_scalar_node*)instance->node;
53 if ((instance->instance_oid.len != 1) || (instance->instance_oid.id[0] != 0))
55 return SNMP_ERR_NOSUCHINSTANCE;
58 instance->access = scalar_node->access;
59 instance->asn1_type = scalar_node->asn1_type;
60 instance->get_value = scalar_node->get_value;
61 instance->set_test = scalar_node->set_test;
62 instance->set_value = scalar_node->set_value;
63 return SNMP_ERR_NOERROR;
67 snmp_scalar_get_next_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance* instance)
70 if (instance->instance_oid.len == 0)
72 instance->instance_oid.len = 1;
73 instance->instance_oid.id[0] = 0;
75 return snmp_scalar_get_instance(root_oid, root_oid_len, instance);
78 return SNMP_ERR_NOSUCHINSTANCE;
83 snmp_scalar_array_get_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance* instance)
88 if ((instance->instance_oid.len == 2) && (instance->instance_oid.id[1] == 0))
90 const struct snmp_scalar_array_node* array_node = (
const struct snmp_scalar_array_node*)instance->node;
91 const struct snmp_scalar_array_node_def* array_node_def = array_node->array_nodes;
94 while (i < array_node->array_node_count)
96 if (array_node_def->oid == instance->instance_oid.id[0])
105 if (i < array_node->array_node_count)
107 instance->access = array_node_def->access;
108 instance->asn1_type = array_node_def->asn1_type;
109 instance->get_value = snmp_scalar_array_get_value;
110 instance->set_test = snmp_scalar_array_set_test;
111 instance->set_value = snmp_scalar_array_set_value;
112 instance->reference.const_ptr = array_node_def;
114 return SNMP_ERR_NOERROR;
118 return SNMP_ERR_NOSUCHINSTANCE;
122 snmp_scalar_array_get_next_instance(
const u32_t *root_oid,
u8_t root_oid_len,
struct snmp_node_instance* instance)
124 const struct snmp_scalar_array_node* array_node = (
const struct snmp_scalar_array_node*)instance->node;
125 const struct snmp_scalar_array_node_def* array_node_def = array_node->array_nodes;
126 const struct snmp_scalar_array_node_def* result =
NULL;
131 if ((instance->instance_oid.len == 0) && (array_node->array_node_count > 0))
136 result = array_node_def;
139 for (i = 1; i < array_node->array_node_count; i++)
141 if (array_node_def->oid < result->oid)
143 result = array_node_def;
148 else if (instance->instance_oid.len >= 1)
150 if (instance->instance_oid.len == 1)
154 while (i < array_node->array_node_count)
156 if (array_node_def->oid == instance->instance_oid.id[0])
158 result = array_node_def;
168 u32_t oid_dist = 0xFFFFFFFFUL;
170 array_node_def = array_node->array_nodes;
171 while (i < array_node->array_node_count)
173 if ((array_node_def->oid > instance->instance_oid.id[0]) && ((
u32_t)(array_node_def->oid - instance->instance_oid.id[0]) < oid_dist))
175 result = array_node_def;
176 oid_dist = array_node_def->oid - instance->instance_oid.id[0];
188 return SNMP_ERR_NOSUCHINSTANCE;
191 instance->instance_oid.len = 2;
192 instance->instance_oid.id[0] = result->oid;
193 instance->instance_oid.id[1] = 0;
195 instance->access = result->access;
196 instance->asn1_type = result->asn1_type;
197 instance->get_value = snmp_scalar_array_get_value;
198 instance->set_test = snmp_scalar_array_set_test;
199 instance->set_value = snmp_scalar_array_set_value;
200 instance->reference.const_ptr = result;
202 return SNMP_ERR_NOERROR;
206 snmp_scalar_array_get_value(
struct snmp_node_instance* instance,
void* value)
208 const struct snmp_scalar_array_node* array_node = (
const struct snmp_scalar_array_node*)instance->node;
209 const struct snmp_scalar_array_node_def* array_node_def = (
const struct snmp_scalar_array_node_def*)instance->reference.const_ptr;
211 return array_node->get_value(array_node_def, value);
215 snmp_scalar_array_set_test(
struct snmp_node_instance* instance,
u16_t value_len,
void* value)
217 const struct snmp_scalar_array_node* array_node = (
const struct snmp_scalar_array_node*)instance->node;
218 const struct snmp_scalar_array_node_def* array_node_def = (
const struct snmp_scalar_array_node_def*)instance->reference.const_ptr;
220 return array_node->set_test(array_node_def, value_len, value);
224 snmp_scalar_array_set_value(
struct snmp_node_instance* instance,
u16_t value_len,
void* value)
226 const struct snmp_scalar_array_node* array_node = (
const struct snmp_scalar_array_node*)instance->node;
227 const struct snmp_scalar_array_node_def* array_node_def = (
const struct snmp_scalar_array_node_def*)instance->reference.const_ptr;
229 return array_node->set_value(array_node_def, value_len, value);
#define LWIP_UNUSED_ARG(x)