mirror of
https://github.com/ep00ch/lwip-contrib-mac.git
synced 2024-06-30 19:29:43 +00:00
Moved lwip_prvmib.c and private_mib.h from unix/proj/minimal to apps/snmp_private_mib and extended it for write support and usage with memory buffers instead of files to be used under non-posix OSes as an example
This commit is contained in:
parent
b411c22658
commit
880ed2c01e
|
@ -42,17 +42,41 @@
|
|||
* Author: Christiaan Simons <christiaan.simons@axon.tv>
|
||||
*/
|
||||
|
||||
#include "private_mib.h"
|
||||
|
||||
#if LWIP_SNMP
|
||||
|
||||
/** Directory where the sensor files are */
|
||||
#define SENSORS_DIR "w:\\sensors"
|
||||
/** Set to 1 to read sensor values from files (in directory defined by SENSORS_DIR) */
|
||||
#define SENSORS_USE_FILES 0
|
||||
/** Set to 1 to search sensor files at startup (in directory defined by SENSORS_DIR) */
|
||||
#define SENSORS_SEARCH_FILES 0
|
||||
|
||||
#if SENSORS_SEARCH_FILES
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <dirent.h>
|
||||
#endif /* SENSORS_SEARCH_FILES */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "private_mib.h"
|
||||
#include "lwip/snmp_msg.h"
|
||||
#include "lwip/snmp_asn1.h"
|
||||
|
||||
#if !SENSORS_USE_FILES || !SENSORS_SEARCH_FILES
|
||||
/** When not using & searching files, defines the number of sensors */
|
||||
#define SENSOR_COUNT 2
|
||||
#endif /* !SENSORS_USE_FILES || !SENSORS_SEARCH_FILES */
|
||||
#if !SENSORS_USE_FILES
|
||||
/** When not using files, contains the values of the sensors */
|
||||
s32_t sensor_values[SENSOR_COUNT];
|
||||
#endif /* !SENSORS_USE_FILES */
|
||||
|
||||
/*
|
||||
This example presents a table for a few (at most 10) sensors.
|
||||
Sensor detection takes place at initialization (once only).
|
||||
|
@ -71,9 +95,10 @@
|
|||
text files in the "sensors" directory.
|
||||
*/
|
||||
|
||||
|
||||
#define SENSOR_MAX 10
|
||||
#define SENSOR_NAME_LEN 20
|
||||
#define SENSORS_DIR "sensors"
|
||||
|
||||
struct sensor_inf
|
||||
{
|
||||
char sensor_files[SENSOR_MAX][SENSOR_NAME_LEN + 1];
|
||||
|
@ -118,7 +143,7 @@ static void sensorentry_set_value_pc(u8_t rid, struct obj_def *od);
|
|||
|
||||
/* sensorentry .1.3.6.1.4.1.26381.1.1.1 (.level0.level1)
|
||||
where level 0 is the object identifier (temperature) and level 1 the index */
|
||||
struct mib_external_node sensorentry = {
|
||||
static struct mib_external_node sensorentry = {
|
||||
&noleafs_get_object_def,
|
||||
&noleafs_get_value,
|
||||
&noleafs_set_test,
|
||||
|
@ -150,11 +175,11 @@ struct mib_external_node sensorentry = {
|
|||
};
|
||||
|
||||
/* sensortable .1.3.6.1.4.1.26381.1.1 */
|
||||
const s32_t sensortable_ids[1] = { 1 };
|
||||
struct mib_node* const sensortable_nodes[1] = {
|
||||
static const s32_t sensortable_ids[1] = { 1 };
|
||||
static struct mib_node* const sensortable_nodes[1] = {
|
||||
(struct mib_node* const)&sensorentry
|
||||
};
|
||||
const struct mib_array_node sensortable = {
|
||||
static const struct mib_array_node sensortable = {
|
||||
&noleafs_get_object_def,
|
||||
&noleafs_get_value,
|
||||
&noleafs_set_test,
|
||||
|
@ -166,11 +191,11 @@ const struct mib_array_node sensortable = {
|
|||
};
|
||||
|
||||
/* example .1.3.6.1.4.1.26381.1 */
|
||||
const s32_t example_ids[1] = { 1 };
|
||||
struct mib_node* const example_nodes[1] = {
|
||||
static const s32_t example_ids[1] = { 1 };
|
||||
static struct mib_node* const example_nodes[1] = {
|
||||
(struct mib_node* const)&sensortable
|
||||
};
|
||||
const struct mib_array_node example = {
|
||||
static const struct mib_array_node example = {
|
||||
&noleafs_get_object_def,
|
||||
&noleafs_get_value,
|
||||
&noleafs_set_test,
|
||||
|
@ -182,9 +207,9 @@ const struct mib_array_node example = {
|
|||
};
|
||||
|
||||
/* lwip .1.3.6.1.4.1.26381 */
|
||||
const s32_t lwip_ids[1] = { 1 };
|
||||
struct mib_node* const lwip_nodes[1] = { (struct mib_node* const)&example };
|
||||
const struct mib_array_node lwip = {
|
||||
static const s32_t lwip_ids[1] = { 1 };
|
||||
static struct mib_node* const lwip_nodes[1] = { (struct mib_node* const)&example };
|
||||
static const struct mib_array_node lwip = {
|
||||
&noleafs_get_object_def,
|
||||
&noleafs_get_value,
|
||||
&noleafs_set_test,
|
||||
|
@ -196,9 +221,9 @@ const struct mib_array_node lwip = {
|
|||
};
|
||||
|
||||
/* enterprises .1.3.6.1.4.1 */
|
||||
const s32_t enterprises_ids[1] = { 26381 };
|
||||
struct mib_node* const enterprises_nodes[1] = { (struct mib_node* const)&lwip };
|
||||
const struct mib_array_node enterprises = {
|
||||
static const s32_t enterprises_ids[1] = { 26381 };
|
||||
static struct mib_node* const enterprises_nodes[1] = { (struct mib_node* const)&lwip };
|
||||
static const struct mib_array_node enterprises = {
|
||||
&noleafs_get_object_def,
|
||||
&noleafs_get_value,
|
||||
&noleafs_set_test,
|
||||
|
@ -210,8 +235,8 @@ const struct mib_array_node enterprises = {
|
|||
};
|
||||
|
||||
/* private .1.3.6.1.4 */
|
||||
const s32_t private_ids[1] = { 1 };
|
||||
struct mib_node* const private_nodes[1] = { (struct mib_node* const)&enterprises };
|
||||
static const s32_t private_ids[1] = { 1 };
|
||||
static struct mib_node* const private_nodes[1] = { (struct mib_node* const)&enterprises };
|
||||
const struct mib_array_node mib_private = {
|
||||
&noleafs_get_object_def,
|
||||
&noleafs_get_value,
|
||||
|
@ -223,6 +248,7 @@ const struct mib_array_node mib_private = {
|
|||
private_nodes
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Initialises this private MIB before use.
|
||||
* @see main.c
|
||||
|
@ -230,14 +256,20 @@ const struct mib_array_node mib_private = {
|
|||
void
|
||||
lwip_privmib_init(void)
|
||||
{
|
||||
#if SENSORS_USE_FILES && SENSORS_SEARCH_FILES
|
||||
char *buf, *ebuf, *cp;
|
||||
size_t bufsize;
|
||||
int nbytes;
|
||||
struct stat sb;
|
||||
struct dirent *dp;
|
||||
int fd;
|
||||
#else /* SENSORS_USE_FILES && SENSORS_SEARCH_FILES */
|
||||
int i;
|
||||
#endif /* SENSORS_USE_FILES && SENSORS_SEARCH_FILES */
|
||||
|
||||
printf("SNMP private MIB start, detecting sensors.\n");
|
||||
|
||||
#if SENSORS_USE_FILES && SENSORS_SEARCH_FILES
|
||||
/* look for sensors in sensors directory */
|
||||
fd = open(SENSORS_DIR, O_RDONLY);
|
||||
if (fd > -1)
|
||||
|
@ -284,6 +316,23 @@ lwip_privmib_init(void)
|
|||
}
|
||||
close(fd);
|
||||
}
|
||||
#else /* SENSORS_USE_FILES && SENSORS_SEARCH_FILES */
|
||||
for (i = 0; i < SENSOR_COUNT; i++) {
|
||||
struct mib_list_node *dummy;
|
||||
s32_t index = i;
|
||||
char name[256];
|
||||
sprintf(name, "%d.txt", i);
|
||||
|
||||
snmp_mib_node_insert(&sensor_addr_inf.sensor_list_rn, index, &dummy);
|
||||
|
||||
strncpy(&sensor_addr_inf.sensor_files[index][0], name, SENSOR_NAME_LEN);
|
||||
printf("%s\n", sensor_addr_inf.sensor_files[index]);
|
||||
#if !SENSORS_USE_FILES
|
||||
/* initialize sensor value to != zero */
|
||||
sensor_values[i] = 11 * (i+1);
|
||||
#endif /* !SENSORS_USE_FILES */
|
||||
}
|
||||
#endif /* SENSORS_USE_FILE && SENSORS_SEARCH_FILES */
|
||||
if (sensor_addr_inf.sensor_list_rn.count != 0)
|
||||
{
|
||||
/* enable sensor table, 2 tree_levels under this node
|
||||
|
@ -376,7 +425,10 @@ sensorentry_get_subid(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id)
|
|||
static void
|
||||
sensorentry_get_object_def_q(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident)
|
||||
{
|
||||
u16_t sensor_register, sensor_address;
|
||||
s32_t sensor_register, sensor_address;
|
||||
|
||||
LWIP_UNUSED_ARG(addr_inf);
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
|
||||
ident_len += 1;
|
||||
ident -= 1;
|
||||
|
@ -384,8 +436,8 @@ sensorentry_get_object_def_q(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *id
|
|||
/* send request */
|
||||
sensor_register = ident[0];
|
||||
sensor_address = ident[1];
|
||||
LWIP_DEBUGF(SNMP_MIB_DEBUG,("sensor_request reg=%"U16_F" addr=%"U16_F"\n",
|
||||
(u16_t)sensor_register, (u16_t)sensor_address));
|
||||
LWIP_DEBUGF(SNMP_MIB_DEBUG,("sensor_request reg=%"S32_F" addr=%"S32_F"\n",
|
||||
sensor_register, sensor_address));
|
||||
/* fake async quesion/answer */
|
||||
snmp_msg_event(rid);
|
||||
}
|
||||
|
@ -393,6 +445,8 @@ sensorentry_get_object_def_q(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *id
|
|||
static void
|
||||
sensorentry_get_object_def_a(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
|
||||
/* return to object name, adding index depth (1) */
|
||||
ident_len += 1;
|
||||
ident -= 1;
|
||||
|
@ -402,7 +456,7 @@ sensorentry_get_object_def_a(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_
|
|||
od->id_inst_ptr = ident;
|
||||
|
||||
od->instance = MIB_OBJECT_TAB;
|
||||
od->access = MIB_OBJECT_READ_ONLY;
|
||||
od->access = MIB_OBJECT_READ_WRITE;
|
||||
od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
|
||||
od->v_len = sizeof(s32_t);
|
||||
}
|
||||
|
@ -416,12 +470,17 @@ sensorentry_get_object_def_a(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_
|
|||
static void
|
||||
sensorentry_get_object_def_pc(u8_t rid, u8_t ident_len, s32_t *ident)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(ident_len);
|
||||
LWIP_UNUSED_ARG(ident);
|
||||
/* nop */
|
||||
}
|
||||
|
||||
static void
|
||||
sensorentry_get_value_q(u8_t rid, struct obj_def *od)
|
||||
{
|
||||
LWIP_UNUSED_ARG(od);
|
||||
|
||||
/* fake async quesion/answer */
|
||||
snmp_msg_event(rid);
|
||||
}
|
||||
|
@ -429,12 +488,18 @@ sensorentry_get_value_q(u8_t rid, struct obj_def *od)
|
|||
static void
|
||||
sensorentry_get_value_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
|
||||
{
|
||||
u8_t i;
|
||||
s32_t i;
|
||||
s32_t *temperature = value;
|
||||
#if SENSORS_USE_FILES
|
||||
FILE* sensf;
|
||||
char senspath[sizeof(SENSORS_DIR)+1+SENSOR_NAME_LEN+1] = SENSORS_DIR"/";
|
||||
#endif /* SENSORS_USE_FILES */
|
||||
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(len);
|
||||
|
||||
i = od->id_inst_ptr[1];
|
||||
#if SENSORS_USE_FILES
|
||||
strncpy(&senspath[sizeof(SENSORS_DIR)],
|
||||
sensor_addr_inf.sensor_files[i],
|
||||
SENSOR_NAME_LEN);
|
||||
|
@ -444,17 +509,25 @@ sensorentry_get_value_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
|
|||
fscanf(sensf,"%"S32_F,temperature);
|
||||
fclose(sensf);
|
||||
}
|
||||
#else /* SENSORS_USE_FILES */
|
||||
if (i <= SENSOR_COUNT) {
|
||||
*temperature = sensor_values[i];
|
||||
}
|
||||
#endif /* SENSORS_USE_FILES */
|
||||
}
|
||||
|
||||
static void
|
||||
sensorentry_get_value_pc(u8_t rid, struct obj_def *od)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(od);
|
||||
/* nop */
|
||||
}
|
||||
|
||||
static void
|
||||
sensorentry_set_test_q(u8_t rid, struct obj_def *od)
|
||||
{
|
||||
LWIP_UNUSED_ARG(od);
|
||||
/* fake async quesion/answer */
|
||||
snmp_msg_event(rid);
|
||||
}
|
||||
|
@ -462,19 +535,29 @@ sensorentry_set_test_q(u8_t rid, struct obj_def *od)
|
|||
static u8_t
|
||||
sensorentry_set_test_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(od);
|
||||
LWIP_UNUSED_ARG(len);
|
||||
LWIP_UNUSED_ARG(value);
|
||||
/* sensors are read-only */
|
||||
return 0;
|
||||
return 1; // 0 -> read only, != 0 -> read/write
|
||||
}
|
||||
|
||||
static void
|
||||
sensorentry_set_test_pc(u8_t rid, struct obj_def *od)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(od);
|
||||
/* nop */
|
||||
}
|
||||
|
||||
static void
|
||||
sensorentry_set_value_q(u8_t rid, struct obj_def *od, u16_t len, void *value)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(od);
|
||||
LWIP_UNUSED_ARG(len);
|
||||
LWIP_UNUSED_ARG(value);
|
||||
/* fake async quesion/answer */
|
||||
snmp_msg_event(rid);
|
||||
}
|
||||
|
@ -482,10 +565,40 @@ sensorentry_set_value_q(u8_t rid, struct obj_def *od, u16_t len, void *value)
|
|||
static void
|
||||
sensorentry_set_value_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
|
||||
{
|
||||
s32_t i;
|
||||
s32_t *temperature = value;
|
||||
#if SENSORS_USE_FILES
|
||||
FILE* sensf;
|
||||
char senspath[sizeof(SENSORS_DIR)+1+SENSOR_NAME_LEN+1] = SENSORS_DIR"/";
|
||||
#endif /* SENSORS_USE_FILES */
|
||||
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(len);
|
||||
|
||||
i = od->id_inst_ptr[1];
|
||||
#if SENSORS_USE_FILES
|
||||
strncpy(&senspath[sizeof(SENSORS_DIR)],
|
||||
sensor_addr_inf.sensor_files[i],
|
||||
SENSOR_NAME_LEN);
|
||||
sensf = fopen(senspath, "w");
|
||||
if (sensf != NULL)
|
||||
{
|
||||
fprintf(sensf, "%"S32_F, temperature);
|
||||
fclose(sensf);
|
||||
}
|
||||
#else /* SENSORS_USE_FILES */
|
||||
if (i <= SENSOR_COUNT) {
|
||||
sensor_values[i] = *temperature;
|
||||
}
|
||||
#endif /* SENSORS_USE_FILES */
|
||||
}
|
||||
|
||||
static void
|
||||
sensorentry_set_value_pc(u8_t rid, struct obj_def *od)
|
||||
{
|
||||
LWIP_UNUSED_ARG(rid);
|
||||
LWIP_UNUSED_ARG(od);
|
||||
/* nop */
|
||||
}
|
||||
|
||||
#endif /* LWIP_SNMP */
|
|
@ -21,6 +21,8 @@ struct private_msg
|
|||
|
||||
void lwip_privmib_init(void);
|
||||
|
||||
#define SNMP_PRIVATE_MIB_INIT() lwip_privmib_init()
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -63,7 +63,8 @@ CORE4FILES=$(LWIPDIR)/core/ipv4/icmp.c $(LWIPDIR)/core/ipv4/ip.c \
|
|||
# SNMPFILES: Extra SNMPv1 agent
|
||||
SNMPFILES=$(LWIPDIR)/core/snmp/asn1_dec.c $(LWIPDIR)/core/snmp/asn1_enc.c \
|
||||
$(LWIPDIR)/core/snmp/mib2.c $(LWIPDIR)/core/snmp/mib_structs.c \
|
||||
$(LWIPDIR)/core/snmp/msg_in.c $(LWIPDIR)/core/snmp/msg_out.c lwip_prvmib.c
|
||||
$(LWIPDIR)/core/snmp/msg_in.c $(LWIPDIR)/core/snmp/msg_out.c \
|
||||
../../../../apps/snmp_private_mib/lwip_prvmib.c
|
||||
|
||||
# NETIFFILES: Files implementing various generic network interface functions.'
|
||||
NETIFFILES=$(LWIPDIR)/netif/etharp.c mintapif.c
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Version="8,00"
|
||||
Name="lwIP_test"
|
||||
ProjectGUID="{8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}"
|
||||
RootNamespace="lwIP_test"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
|
@ -79,8 +78,6 @@
|
|||
AdditionalLibraryDirectories="$(PCAP_DIR)\Lib"
|
||||
ProgramDatabaseFile=".\Release/test.pdb"
|
||||
SubSystem="1"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
|
@ -168,8 +165,6 @@
|
|||
AdditionalLibraryDirectories="$(PCAP_DIR)\Lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
|
@ -371,11 +366,11 @@
|
|||
Name="private_mib"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\lwip_prvmib.c"
|
||||
RelativePath="..\..\..\apps\snmp_private_mib\lwip_prvmib.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\private_mib.h"
|
||||
RelativePath="..\..\..\apps\snmp_private_mib\private_mib.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
|
|
Loading…
Reference in New Issue
Block a user