Enabled LWIP_SNMP for development in the 'minimal' example.

This commit is contained in:
christiaans 2006-08-21 10:21:54 +00:00
parent a40ebbcac3
commit 922405d4e9
8 changed files with 77 additions and 7 deletions

View File

@ -59,11 +59,16 @@ CORE4FILES=$(LWIPDIR)/core/ipv4/icmp.c $(LWIPDIR)/core/ipv4/ip.c \
$(LWIPDIR)/core/inet.c $(LWIPDIR)/core/ipv4/ip_addr.c \
$(LWIPDIR)/core/ipv4/ip_frag.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
# NETIFFILES: Files implementing various generic network interface functions.'
NETIFFILES=$(LWIPDIR)/netif/etharp.c mintapif.c
# LWIPFILES: All the above.
LWIPFILES=$(COREFILES) $(CORE4FILES) $(NETIFFILES)
LWIPFILES=$(COREFILES) $(CORE4FILES) $(SNMPFILES) $(NETIFFILES)
LWIPFILESW=$(wildcard $(LWIPFILES))
LWIPOBJS=$(notdir $(LWIPFILESW:.c=.o))

View File

@ -1,3 +1,4 @@
This is an example of a very minimal lwIP project. It runs in a single
thread and runs a single example application - an echo server. The
echo application is implemented using the raw API.
echo application is implemented using the raw API. Additionally this
raw API example hosts the SNMPv1 agent for development purposes.

View File

@ -149,6 +149,17 @@ a lot of data that needs to be copied, this should be set high. */
(recommended). */
#define DHCP_DOES_ARP_CHECK 1
/* ---------- SNMP options ---------- */
/** @todo SNMP isn't functional yet.
@note UDP must be available for SNMP transport */
#ifndef LWIP_SNMP
#define LWIP_SNMP 1
#endif
#ifndef SNMP_PRIVATE_MIB
#define SNMP_PRIVATE_MIB 0
#endif
/* ---------- UDP options ---------- */
#define LWIP_UDP 1
#define UDP_TTL 255

View File

@ -41,6 +41,7 @@
#include "lwip/ip.h"
#include "lwip/ip_frag.h"
#include "lwip/udp.h"
#include "lwip/snmp_msg.h"
#include "lwip/tcp.h"
#include "mintapif.h"
@ -71,6 +72,7 @@ main(int argc, char **argv)
netif_init();
ip_init();
udp_init();
snmp_init();
tcp_init();
printf("TCP/IP initialized.\n");

View File

@ -60,6 +60,7 @@
#endif
#include "lwip/stats.h"
#include "lwip/snmp.h"
#include "lwip/mem.h"
#include "netif/etharp.h"
@ -149,6 +150,7 @@ low_level_output(struct netif *netif, struct pbuf *p)
struct pbuf *q;
char buf[1514];
char *bufptr;
int written;
mintapif = netif->state;
@ -166,9 +168,14 @@ low_level_output(struct netif *netif, struct pbuf *p)
}
/* signal that packet should be sent(); */
if (write(mintapif->fd, buf, p->tot_len) == -1) {
written = write(mintapif->fd, buf, p->tot_len);
if (written == -1) {
snmp_inc_ifoutdiscards(netif);
perror("tapif: write");
}
else {
snmp_add_ifoutoctets(netif, written);
}
return ERR_OK;
}
/*-----------------------------------------------------------------------------------*/
@ -181,22 +188,25 @@ low_level_output(struct netif *netif, struct pbuf *p)
*/
/*-----------------------------------------------------------------------------------*/
static struct pbuf *
low_level_input(struct mintapif *mintapif)
low_level_input(struct netif *netif)
{
struct pbuf *p, *q;
u16_t len;
char buf[1514];
char *bufptr;
struct mintapif *mintapif;
mintapif = netif->state;
/* Obtain the size of the packet and put it into the "len"
variable. */
len = read(mintapif->fd, buf, sizeof(buf));
snmp_add_ifinoctets(netif,len);
/* if (((double)rand()/(double)RAND_MAX) < 0.1) {
printf("drop\n");
return NULL;
}*/
/* We allocate a pbuf chain of pbufs from the pool. */
p = pbuf_alloc(PBUF_LINK, len, PBUF_POOL);
@ -216,6 +226,7 @@ low_level_input(struct mintapif *mintapif)
/* acknowledge that packet has been read(); */
} else {
/* drop packet(); */
snmp_inc_ifindiscards(netif);
printf("Could not allocate pbufs\n");
}
@ -258,7 +269,7 @@ mintapif_input(struct netif *netif)
mintapif = netif->state;
p = low_level_input(mintapif);
p = low_level_input(netif);
if (p != NULL) {
@ -304,7 +315,29 @@ mintapif_init(struct netif *netif)
struct mintapif *mintapif;
mintapif = mem_malloc(sizeof(struct mintapif));
if (mintapif == NULL)
{
LWIP_DEBUGF(NETIF_DEBUG, ("cs8900_init: out of memory for mintapif\n"));
return ERR_MEM;
}
netif->state = mintapif;
#if LWIP_SNMP
/* ifType is other(1), there doesn't seem
to be a proper type for the tunnel if */
netif->link_type = 1;
/* @todo get this from struct tunif? */
netif->link_speed = 0;
netif->ts = 0;
netif->ifinoctets = 0;
netif->ifinucastpkts = 0;
netif->ifinnucastpkts = 0;
netif->ifindiscards = 0;
netif->ifoutoctets = 0;
netif->ifoutucastpkts = 0;
netif->ifoutnucastpkts = 0;
netif->ifoutdiscards = 0;
#endif
netif->hwaddr_len = 6;
netif->name[0] = IFNAME0;
netif->name[1] = IFNAME1;

View File

@ -39,6 +39,7 @@
#include <signal.h>
#include <sys/time.h>
#include "timer.h"
#include "lwip/snmp.h"
static struct itimerval tmr;
@ -136,6 +137,8 @@ sigalarm_handler(int sig)
unsigned char i;
struct itmr *tp;
snmp_inc_sysuptime();
tp = &timers[TIMER_NUM-1];
for(i = TIMER_NUM; i > 0; i--)
{

View File

@ -57,6 +57,10 @@ COREFILES=$(LWIPDIR)/core/mem.c $(LWIPDIR)/core/memp.c $(LWIPDIR)/core/netif.c \
$(LWIPDIR)/core/tcp_out.c $(LWIPDIR)/core/udp.c $(LWIPDIR)/core/dhcp.c
CORE4FILES=$(wildcard $(LWIPDIR)/core/ipv4/*.c) $(LWIPDIR)/core/inet.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
# APIFILES: The files which implement the sequential and socket APIs.
APIFILES=$(LWIPDIR)/api/api_lib.c $(LWIPDIR)/api/api_msg.c $(LWIPDIR)/api/tcpip.c \
@ -84,7 +88,7 @@ APPFILES=apps/fs.c apps/httpd.c \
apps/shell.c
# LWIPFILES: All the above.
LWIPFILES=$(COREFILES) $(CORE4FILES) $(APIFILES) $(NETIFFILES) $(ARCHFILES)
LWIPFILES=$(COREFILES) $(CORE4FILES) $(SNMPFILES) $(APIFILES) $(NETIFFILES) $(ARCHFILES)
LWIPFILESW=$(wildcard $(LWIPFILES))
LWIPOBJS=$(notdir $(LWIPFILESW:.c=.o))

View File

@ -195,6 +195,17 @@ a lot of data that needs to be copied, this should be set high. */
(recommended). */
#define DHCP_DOES_ARP_CHECK 1
/* ---------- SNMP options ---------- */
/** @todo SNMP is experimental for now
@note UDP must be available for SNMP transport */
#ifndef LWIP_SNMP
#define LWIP_SNMP 0
#endif
#ifndef SNMP_PRIVATE_MIB
#define SNMP_PRIVATE_MIB 0
#endif
/* ---------- UDP options ---------- */
#define LWIP_UDP 1
#define UDP_TTL 255