if LWIP_TCP is 0 do not link in TCP code.putting ugly ifdefs in api and core :(.Also only udp_init if LWIP_UDP is on

This commit is contained in:
jani 2003-03-21 10:48:21 +00:00
parent 9cafc7a764
commit 859f06a91e
6 changed files with 76 additions and 44 deletions

View File

@ -37,37 +37,6 @@
#include "lwip/sys.h" #include "lwip/sys.h"
#include "lwip/tcpip.h" #include "lwip/tcpip.h"
/*-----------------------------------------------------------------------------------*/
static err_t
recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
struct netconn *conn;
u16_t len;
conn = arg;
if(conn == NULL) {
pbuf_free(p);
return ERR_VAL;
}
if(conn->recvmbox != SYS_MBOX_NULL) {
conn->err = err;
if (p != NULL) {
len = p->tot_len;
conn->recv_avail += len;
}
else
len = 0;
/* Register event with callback */
if (conn->callback)
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, len);
sys_mbox_post(conn->recvmbox, p);
}
return ERR_OK;
}
/*-----------------------------------------------------------------------------------*/
#if LWIP_UDP #if LWIP_UDP
static void static void
recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p, recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
@ -102,6 +71,38 @@ recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
} }
} }
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
/*-----------------------------------------------------------------------------------*/
static err_t
recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
struct netconn *conn;
u16_t len;
conn = arg;
if(conn == NULL) {
pbuf_free(p);
return ERR_VAL;
}
if(conn->recvmbox != SYS_MBOX_NULL) {
conn->err = err;
if (p != NULL) {
len = p->tot_len;
conn->recv_avail += len;
}
else
len = 0;
/* Register event with callback */
if (conn->callback)
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, len);
sys_mbox_post(conn->recvmbox, p);
}
return ERR_OK;
}
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static err_t static err_t
poll_tcp(void *arg, struct tcp_pcb *pcb) poll_tcp(void *arg, struct tcp_pcb *pcb)
@ -232,6 +233,7 @@ accept_function(void *arg, struct tcp_pcb *newpcb, err_t err)
sys_mbox_post(mbox, newconn); sys_mbox_post(mbox, newconn);
return ERR_OK; return ERR_OK;
} }
#endif /* LWIP_TCP */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static void static void
do_newconn(struct api_msg_msg *msg) do_newconn(struct api_msg_msg *msg)
@ -253,6 +255,7 @@ do_delconn(struct api_msg_msg *msg)
udp_remove(msg->conn->pcb.udp); udp_remove(msg->conn->pcb.udp);
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
if(msg->conn->pcb.tcp->state == LISTEN) { if(msg->conn->pcb.tcp->state == LISTEN) {
tcp_accept(msg->conn->pcb.tcp, NULL); tcp_accept(msg->conn->pcb.tcp, NULL);
@ -267,6 +270,8 @@ do_delconn(struct api_msg_msg *msg)
tcp_abort(msg->conn->pcb.tcp); tcp_abort(msg->conn->pcb.tcp);
} }
} }
#endif
default:
break; break;
} }
} }
@ -303,10 +308,13 @@ do_bind(struct api_msg_msg *msg)
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn); udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
msg->conn->pcb.tcp = tcp_new(); msg->conn->pcb.tcp = tcp_new();
setup_tcp(msg->conn); setup_tcp(msg->conn);
break; #endif /* LWIP_TCP */
default:
break;
} }
} }
switch(msg->conn->type) { switch(msg->conn->type) {
@ -319,13 +327,17 @@ do_bind(struct api_msg_msg *msg)
msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port); msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
msg->conn->err = tcp_bind(msg->conn->pcb.tcp, msg->conn->err = tcp_bind(msg->conn->pcb.tcp,
msg->msg.bc.ipaddr, msg->msg.bc.port); msg->msg.bc.ipaddr, msg->msg.bc.port);
#endif /* LWIP_TCP */
default:
break; break;
} }
sys_mbox_post(msg->conn->mbox, NULL); sys_mbox_post(msg->conn->mbox, NULL);
} }
#if LWIP_TCP
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static err_t static err_t
do_connected(void *arg, struct tcp_pcb *pcb, err_t err) do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
@ -339,14 +351,13 @@ do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
} }
conn->err = err; conn->err = err;
if(conn->type == NETCONN_TCP && err == ERR_OK) { if(conn->type == NETCONN_TCP && err == ERR_OK) {
setup_tcp(conn); setup_tcp(conn);
} }
sys_mbox_post(conn->mbox, NULL); sys_mbox_post(conn->mbox, NULL);
return ERR_OK; return ERR_OK;
} }
#endif
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static void static void
do_connect(struct api_msg_msg *msg) do_connect(struct api_msg_msg *msg)
@ -384,6 +395,7 @@ do_connect(struct api_msg_msg *msg)
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn); udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
msg->conn->pcb.tcp = tcp_new(); msg->conn->pcb.tcp = tcp_new();
if(msg->conn->pcb.tcp == NULL) { if(msg->conn->pcb.tcp == NULL) {
@ -391,6 +403,8 @@ do_connect(struct api_msg_msg *msg)
sys_mbox_post(msg->conn->mbox, NULL); sys_mbox_post(msg->conn->mbox, NULL);
return; return;
} }
#endif
default:
break; break;
} }
} }
@ -405,12 +419,15 @@ do_connect(struct api_msg_msg *msg)
sys_mbox_post(msg->conn->mbox, NULL); sys_mbox_post(msg->conn->mbox, NULL);
break; break;
#endif #endif
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
/* tcp_arg(msg->conn->pcb.tcp, msg->conn);*/ /* tcp_arg(msg->conn->pcb.tcp, msg->conn);*/
setup_tcp(msg->conn); setup_tcp(msg->conn);
tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port, tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port,
do_connected); do_connected);
/*tcp_output(msg->conn->pcb.tcp);*/ /*tcp_output(msg->conn->pcb.tcp);*/
#endif
default:
break; break;
} }
} }
@ -450,6 +467,7 @@ do_listen(struct api_msg_msg *msg)
DEBUGF(API_MSG_DEBUG, ("api_msg: listen UDP: cannot listen for UDP.\n")); DEBUGF(API_MSG_DEBUG, ("api_msg: listen UDP: cannot listen for UDP.\n"));
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
msg->conn->pcb.tcp = tcp_listen(msg->conn->pcb.tcp); msg->conn->pcb.tcp = tcp_listen(msg->conn->pcb.tcp);
if(msg->conn->pcb.tcp == NULL) { if(msg->conn->pcb.tcp == NULL) {
@ -465,6 +483,8 @@ do_listen(struct api_msg_msg *msg)
tcp_arg(msg->conn->pcb.tcp, msg->conn); tcp_arg(msg->conn->pcb.tcp, msg->conn);
tcp_accept(msg->conn->pcb.tcp, accept_function); tcp_accept(msg->conn->pcb.tcp, accept_function);
} }
#endif
default:
break; break;
} }
} }
@ -515,18 +535,22 @@ do_send(struct api_msg_msg *msg)
static void static void
do_recv(struct api_msg_msg *msg) do_recv(struct api_msg_msg *msg)
{ {
#if LWIP_TCP
if(msg->conn->pcb.tcp != NULL) { if(msg->conn->pcb.tcp != NULL) {
if(msg->conn->type == NETCONN_TCP) { if(msg->conn->type == NETCONN_TCP) {
tcp_recved(msg->conn->pcb.tcp, msg->msg.len); tcp_recved(msg->conn->pcb.tcp, msg->msg.len);
} }
} }
#endif
sys_mbox_post(msg->conn->mbox, NULL); sys_mbox_post(msg->conn->mbox, NULL);
} }
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static void static void
do_write(struct api_msg_msg *msg) do_write(struct api_msg_msg *msg)
{ {
#if LWIP_TCP
err_t err; err_t err;
#endif
if(msg->conn->pcb.tcp != NULL) { if(msg->conn->pcb.tcp != NULL) {
switch(msg->conn->type) { switch(msg->conn->type) {
#if LWIP_UDP #if LWIP_UDP
@ -538,6 +562,7 @@ do_write(struct api_msg_msg *msg)
msg->conn->err = ERR_VAL; msg->conn->err = ERR_VAL;
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
err = tcp_write(msg->conn->pcb.tcp, msg->msg.w.dataptr, err = tcp_write(msg->conn->pcb.tcp, msg->msg.w.dataptr,
msg->msg.w.len, msg->msg.w.copy); msg->msg.w.len, msg->msg.w.copy);
@ -555,6 +580,8 @@ do_write(struct api_msg_msg *msg)
if (tcp_sndbuf(msg->conn->pcb.tcp) <= TCP_SNDLOWAT) if (tcp_sndbuf(msg->conn->pcb.tcp) <= TCP_SNDLOWAT)
(*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDMINUS, msg->msg.w.len); (*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDMINUS, msg->msg.w.len);
} }
#endif
default:
break; break;
} }
} }
@ -578,11 +605,14 @@ do_close(struct api_msg_msg *msg)
case NETCONN_UDP: case NETCONN_UDP:
break; break;
#endif /* LWIP_UDP */ #endif /* LWIP_UDP */
#if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
if(msg->conn->pcb.tcp->state == LISTEN) { if(msg->conn->pcb.tcp->state == LISTEN) {
err = tcp_close(msg->conn->pcb.tcp); err = tcp_close(msg->conn->pcb.tcp);
} }
msg->conn->err = err; msg->conn->err = err;
#endif
default:
break; break;
} }
} }

View File

@ -46,7 +46,7 @@
static void (* tcpip_init_done)(void *arg) = NULL; static void (* tcpip_init_done)(void *arg) = NULL;
static void *tcpip_init_done_arg; static void *tcpip_init_done_arg;
static sys_mbox_t mbox; static sys_mbox_t mbox;
#if LWIP_TCP
static int tcpip_tcp_timer_active = 0; static int tcpip_tcp_timer_active = 0;
@ -72,6 +72,7 @@ tcp_timer_needed(void)
sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
} }
} }
#endif /* LWIP_TCP */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static void static void
tcpip_thread(void *arg) tcpip_thread(void *arg)
@ -81,9 +82,12 @@ tcpip_thread(void *arg)
(void)arg; (void)arg;
ip_init(); ip_init();
#if LWIP_UDP
udp_init(); udp_init();
#endif
#if LWIP_TCP
tcp_init(); tcp_init();
#endif
if(tcpip_init_done != NULL) { if(tcpip_init_done != NULL) {
tcpip_init_done(tcpip_init_done_arg); tcpip_init_done(tcpip_init_done_arg);
} }

View File

@ -47,7 +47,7 @@
#include "lwip/memp.h" #include "lwip/memp.h"
#include "lwip/tcp.h" #include "lwip/tcp.h"
#if LWIP_TCP
/* Incremented every coarse grained timer shot /* Incremented every coarse grained timer shot
(typically every 500 ms, determined by TCP_COARSE_TIMEOUT). */ (typically every 500 ms, determined by TCP_COARSE_TIMEOUT). */
@ -1168,6 +1168,7 @@ tcp_pcbs_sane(void)
return 1; return 1;
} }
#endif /* TCP_DEBUG */ #endif /* TCP_DEBUG */
#endif /* LWIP_TCP */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/

View File

@ -55,7 +55,7 @@
#include "lwip/stats.h" #include "lwip/stats.h"
#include "arch/perf.h" #include "arch/perf.h"
#if LWIP_TCP
/* These variables are global to all functions involved in the input /* These variables are global to all functions involved in the input
processing of TCP segments. They are set by the tcp_input() processing of TCP segments. They are set by the tcp_input()
function. */ function. */
@ -1135,5 +1135,6 @@ tcp_parseopt(struct tcp_pcb *pcb)
} }
} }
} }
#endif /* LWIP_TCP */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/

View File

@ -53,7 +53,7 @@
#include "lwip/stats.h" #include "lwip/stats.h"
#if LWIP_TCP
#define MIN(x,y) (x) < (y)? (x): (y) #define MIN(x,y) (x) < (y)? (x): (y)
@ -580,7 +580,7 @@ tcp_rexmit(struct tcp_pcb *pcb)
tcp_output(pcb); tcp_output(pcb);
} }
#endif /* LWIP_TCP */

View File

@ -58,7 +58,6 @@
/*static*/ struct udp_pcb *udp_pcbs = NULL; /*static*/ struct udp_pcb *udp_pcbs = NULL;
static struct udp_pcb *pcb_cache = NULL; static struct udp_pcb *pcb_cache = NULL;
#endif /* LWIP_UDP */
#if UDP_DEBUG #if UDP_DEBUG
int udp_debug_print(struct udp_hdr *udphdr); int udp_debug_print(struct udp_hdr *udphdr);
@ -68,12 +67,9 @@ int udp_debug_print(struct udp_hdr *udphdr);
void void
udp_init(void) udp_init(void)
{ {
#if LWIP_UDP
udp_pcbs = pcb_cache = NULL; udp_pcbs = pcb_cache = NULL;
#endif /* LWIP_UDP */
} }
#if LWIP_UDP
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* udp_lookup: /* udp_lookup:
* *