tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT & ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the name is tcpip_input (we keep the name of 1.2.0 function).

This commit is contained in:
fbernon 2007-08-22 10:04:35 +00:00
parent c4b97a1710
commit 42f3c24fc4
5 changed files with 32 additions and 130 deletions

View File

@ -18,6 +18,12 @@ HISTORY
* [Enter new changes just after this line - do not remove this line] * [Enter new changes just after this line - do not remove this line]
++ New features: ++ New features:
2007-08-22 Frédéric Bernon
* tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT &
ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the
name is tcpip_input (we keep the name of 1.2.0 function).
2007-08-17 Jared Grubb 2007-08-17 Jared Grubb
* memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool * memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool
settings into new memp_std.h and optional user file lwippools.h. This adds settings into new memp_std.h and optional user file lwippools.h. This adds

View File

@ -205,7 +205,7 @@ igmp_timer(void *arg)
} }
#endif /* LWIP_IGMP */ #endif /* LWIP_IGMP */
#if ETHARP_TCPIP_ETHINPUT #if LWIP_ARP
/** /**
* Process received ethernet frames. Using this function instead of directly * Process received ethernet frames. Using this function instead of directly
* calling ip_input and passing ARP frames through etharp in ethernetif_input, * calling ip_input and passing ARP frames through etharp in ethernetif_input,
@ -228,20 +228,20 @@ ethernet_input(struct pbuf *p, struct netif *netif)
#if ETHARP_TRUST_IP_MAC #if ETHARP_TRUST_IP_MAC
/* update ARP table */ /* update ARP table */
etharp_ip_input( netif, p); etharp_ip_input( netif, p);
#endif #endif /* ETHARP_TRUST_IP_MAC */
/* skip Ethernet header */ /* skip Ethernet header */
if(pbuf_header(p, -(s16_t)sizeof(struct eth_hdr))) { if(pbuf_header(p, -(s16_t)sizeof(struct eth_hdr))) {
LWIP_ASSERT("Can't move over header in packet", 0); LWIP_ASSERT("Can't move over header in packet", 0);
pbuf_free(p); pbuf_free(p);
p = NULL; p = NULL;
} } else {
else
/* pass to IP layer */ /* pass to IP layer */
ip_input(p, netif); ip_input(p, netif);
}
break; break;
case ETHTYPE_ARP: case ETHTYPE_ARP:
/* pass p to ARP module */ /* pass p to ARP module */
etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p); etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p);
break; break;
@ -249,6 +249,7 @@ ethernet_input(struct pbuf *p, struct netif *netif)
case ETHTYPE_PPPOEDISC: /* PPP Over Ethernet Discovery Stage */ case ETHTYPE_PPPOEDISC: /* PPP Over Ethernet Discovery Stage */
pppoe_disc_input(netif, p); pppoe_disc_input(netif, p);
break; break;
case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */ case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */
pppoe_data_input(netif, p); pppoe_data_input(netif, p);
break; break;
@ -262,7 +263,7 @@ ethernet_input(struct pbuf *p, struct netif *netif)
return ERR_OK; /* return value ignored */ return ERR_OK; /* return value ignored */
} }
#endif /* ETHARP_TCPIP_ETHINPUT */ #endif /* LWIP_ARP */
/** /**
* The main lwIP thread. This thread has exclusive access to lwIP core functions * The main lwIP thread. This thread has exclusive access to lwIP core functions
@ -312,13 +313,13 @@ tcpip_thread(void *arg)
msg->msg.apimsg->function(&(msg->msg.apimsg->msg)); msg->msg.apimsg->function(&(msg->msg.apimsg->msg));
break; break;
#if ETHARP_TCPIP_INPUT || ETHARP_TCPIP_ETHINPUT #if LWIP_ARP
case TCPIP_MSG_INPKT: case TCPIP_MSG_INPKT:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg)); LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg));
msg->msg.inp.f(msg->msg.inp.p, msg->msg.inp.netif); ethernet_input(msg->msg.inp.p, msg->msg.inp.netif);
memp_free(MEMP_TCPIP_MSG_INPKT, msg); memp_free(MEMP_TCPIP_MSG_INPKT, msg);
break; break;
#endif /* ETHARP_TCPIP_INPUT || ETHARP_TCPIP_ETHINPUT */ #endif /* LWIP_ARP */
#if LWIP_NETIF_API #if LWIP_NETIF_API
case TCPIP_MSG_NETIFAPI: case TCPIP_MSG_NETIFAPI:
@ -332,6 +333,7 @@ tcpip_thread(void *arg)
msg->msg.cb.f(msg->msg.cb.ctx); msg->msg.cb.f(msg->msg.cb.ctx);
memp_free(MEMP_TCPIP_MSG_API, msg); memp_free(MEMP_TCPIP_MSG_API, msg);
break; break;
case TCPIP_MSG_TIMEOUT: case TCPIP_MSG_TIMEOUT:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg)); LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg));
@ -341,17 +343,18 @@ tcpip_thread(void *arg)
sys_untimeout (msg->msg.tmo.h, msg->msg.tmo.arg); sys_untimeout (msg->msg.tmo.h, msg->msg.tmo.arg);
memp_free(MEMP_TCPIP_MSG_API, msg); memp_free(MEMP_TCPIP_MSG_API, msg);
break; break;
default: default:
break; break;
} }
} }
} }
#if ETHARP_TCPIP_INPUT #if LWIP_ARP
/** /**
* Pass a received IP packet to tcpip_thread for input processing * Pass a received packet to tcpip_thread for input processing
* *
* @param p the recevied packet, p->payload pointing to the IP header * @param p the received packet, p->payload pointing to the Ethernet header
* @param netif the network interface on which the packet was received * @param netif the network interface on which the packet was received
*/ */
err_t err_t
@ -366,7 +369,6 @@ tcpip_input(struct pbuf *p, struct netif *inp)
} }
msg->type = TCPIP_MSG_INPKT; msg->type = TCPIP_MSG_INPKT;
msg->msg.inp.f = ip_input;
msg->msg.inp.p = p; msg->msg.inp.p = p;
msg->msg.inp.netif = inp; msg->msg.inp.netif = inp;
sys_mbox_post(mbox, msg); sys_mbox_post(mbox, msg);
@ -374,42 +376,7 @@ tcpip_input(struct pbuf *p, struct netif *inp)
} }
return ERR_VAL; return ERR_VAL;
} }
#endif /* LWIP_ARP */
err_t
tcpip_input_callback(struct pbuf *p, struct netif *inp, err_t (*f)(struct pbuf *, struct netif *))
{
struct tcpip_msg *msg;
if (mbox != SYS_MBOX_NULL) {
msg = memp_malloc(MEMP_TCPIP_MSG_INPKT);
if (msg == NULL) {
return ERR_MEM;
}
msg->type = TCPIP_MSG_INPKT;
msg->msg.inp.f = f;
msg->msg.inp.p = p;
msg->msg.inp.netif = inp;
sys_mbox_post(mbox, msg);
return ERR_OK;
}
return ERR_VAL;
}
#endif /* ETHARP_TCPIP_INPUT */
#if ETHARP_TCPIP_ETHINPUT
/**
* Pass a received IP packet to tcpip_thread for input processing
*
* @param p the recevied packet, p->payload pointing to the ethernet header
* @param netif the network interface on which the packet was received
*/
err_t
tcpip_ethinput(struct pbuf *p, struct netif *inp)
{
return tcpip_input_callback(p, inp, ethernet_input);
}
#endif /* ETHARP_TCPIP_ETHINPUT */
/** /**
* Call a specific function in the thread context of * Call a specific function in the thread context of

View File

@ -316,27 +316,6 @@
#define ETHARP_TRUST_IP_MAC 1 #define ETHARP_TRUST_IP_MAC 1
#endif #endif
/**
* ETHARP_TCPIP_INPUT==1: Driver can pass packets to tcpip_input after it
* has processed any incoming ARP packets. Incoming IP packets are then
* processed in tcpip_thread context. It is recommended that you use
* ETHARP_TCPIP_ETHINPUT instead; see that option for explanation.
* (only useful if you use tcpip.c)
*/
#ifndef ETHARP_TCPIP_INPUT
#define ETHARP_TCPIP_INPUT 1
#endif
/**
* ETHARP_TCPIP_ETHINPUT==1: Driver passes *all* packets to tcpip_ethinput
* (and not tcpip_input). IP and ARP packets will be both processed inside
* tcpip_thread context. The aim is to protect ARP layer against concurrent
* access. Older ports have to be updated to use tcpip_ethinput.
*/
#ifndef ETHARP_TCPIP_ETHINPUT
#define ETHARP_TCPIP_ETHINPUT 1
#endif
/** /**
* ETHARP_QUEUE_FIRST is deprecated * ETHARP_QUEUE_FIRST is deprecated
*/ */

View File

@ -64,14 +64,9 @@ err_t tcpip_apimsg(struct api_msg *apimsg);
err_t tcpip_apimsg_lock(struct api_msg *apimsg); err_t tcpip_apimsg_lock(struct api_msg *apimsg);
#endif /* LWIP_TCPIP_CORE_LOCKING */ #endif /* LWIP_TCPIP_CORE_LOCKING */
#if ETHARP_TCPIP_INPUT #if LWIP_ARP
err_t tcpip_input(struct pbuf *p, struct netif *inp); err_t tcpip_input(struct pbuf *p, struct netif *inp);
err_t tcpip_input_callback(struct pbuf *p, struct netif *inp, err_t (*f)(struct pbuf *, struct netif *)); #endif /* LWIP_ARP */
#endif /* ETHARP_TCPIP_INPUT */
#if ETHARP_TCPIP_ETHINPUT
err_t tcpip_ethinput(struct pbuf *p, struct netif *inp);
#endif /* ETHARP_TCPIP_ETHINPUT */
#if LWIP_NETIF_API #if LWIP_NETIF_API
err_t tcpip_netifapi(struct netifapi_msg *netifapimsg); err_t tcpip_netifapi(struct netifapi_msg *netifapimsg);
@ -86,9 +81,9 @@ err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg);
enum tcpip_msg_type { enum tcpip_msg_type {
TCPIP_MSG_API, TCPIP_MSG_API,
#if ETHARP_TCPIP_INPUT || ETHARP_TCPIP_ETHINPUT #if LWIP_ARP
TCPIP_MSG_INPKT, TCPIP_MSG_INPKT,
#endif /* ETHARP_TCPIP_INPUT || ETHARP_TCPIP_ETHINPUT */ #endif /* LWIP_ARP */
#if LWIP_NETIF_API #if LWIP_NETIF_API
TCPIP_MSG_NETIFAPI, TCPIP_MSG_NETIFAPI,
#endif /* LWIP_NETIF_API */ #endif /* LWIP_NETIF_API */
@ -104,11 +99,12 @@ struct tcpip_msg {
#if LWIP_NETIF_API #if LWIP_NETIF_API
struct netifapi_msg *netifapimsg; struct netifapi_msg *netifapimsg;
#endif /* LWIP_NETIF_API */ #endif /* LWIP_NETIF_API */
#if LWIP_ARP
struct { struct {
struct pbuf *p; struct pbuf *p;
struct netif *netif; struct netif *netif;
err_t (*f)(struct pbuf *, struct netif *);
} inp; } inp;
#endif /* LWIP_ARP */
struct { struct {
void (*f)(void *ctx); void (*f)(void *ctx);
void *ctx; void *ctx;

View File

@ -236,10 +236,13 @@ ethernetif_input(struct netif *netif)
switch (htons(ethhdr->type)) { switch (htons(ethhdr->type)) {
#if ETHARP_TCPIP_ETHINPUT
/* IP or ARP packet? */ /* IP or ARP packet? */
case ETHTYPE_IP: case ETHTYPE_IP:
case ETHTYPE_ARP: case ETHTYPE_ARP:
#if PPPOE_SUPPORT
case ETHTYPE_PPPOEDISC:
case ETHTYPE_PPPOE:
#endif /* PPPOE_SUPPORT */
/* full packet send to tcpip_thread to process */ /* full packet send to tcpip_thread to process */
if (netif->input(p, netif)!=ERR_OK) if (netif->input(p, netif)!=ERR_OK)
{ LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); { LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
@ -248,55 +251,6 @@ ethernetif_input(struct netif *netif)
} }
break; break;
#else /* ETHARP_TCPIP_ETHINPUT */
#if ETHARP_TCPIP_INPUT
/* IP packet? */
case ETHTYPE_IP:
#if ETHARP_TRUST_IP_MAC
/* update ARP table */
/* In multithreaded environments, watch out if using etharp_ip_input()
* in another thread than the main tcpip_thread, since the ARP table
* is not locked from concurrent access!!!
* Use ETHARP_TCPIP_ETHINPUT=1 instead so ARP processing is done inside
* the thread context of tcpip_thread.
*/
etharp_ip_input(netif, p);
#endif /* ETHARP_TRUST_IP_MAC */
/* skip Ethernet header */
pbuf_header(p, -sizeof(struct eth_hdr));
/* pass to network layer */
if (netif->input(p, netif)!=ERR_OK)
{ LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
pbuf_free(p);
p = NULL;
}
break;
/* ARP packet? */
case ETHTYPE_ARP:
/* pass p to ARP module */
/* In multithreaded environments, watch out if using etharp_ip_input()
* in another thread than the main tcpip_thread, since the ARP table
* is not locked from concurrent access!!!
* Use ETHARP_TCPIP_ETHINPUT=1 instead so ARP processing is done inside
* the thread context of tcpip_thread.
*/
etharp_arp_input(netif, ethernetif->ethaddr, p);
break;
#endif /* ETHARP_TCPIP_INPUT */
#endif /* ETHARP_TCPIP_ETHINPUT */
#if PPPOE_SUPPORT
case ETHTYPE_PPPOEDISC: /* PPP Over Ethernet Discovery Stage */
pppoe_disc_input(netif, p);
break;
case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */
pppoe_data_input(netif, p);
break;
#endif /* PPPOE_SUPPORT */
default: default:
pbuf_free(p); pbuf_free(p);
p = NULL; p = NULL;