From 18bb74e5c5e8c89dae4f7e39385494db276af6eb Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Mon, 7 Mar 2016 20:06:47 +0100 Subject: [PATCH] Decouple tcpip.c/tcpip_priv.h from PPP API PPP API can now be moved to netif/ppp subdir --- src/api/pppapi.c | 84 ++++++++++++++++++++++++++---- src/api/tcpip.c | 60 --------------------- src/include/lwip/pppapi.h | 2 +- src/include/lwip/priv/tcpip_priv.h | 18 ------- 4 files changed, 76 insertions(+), 88 deletions(-) diff --git a/src/api/pppapi.c b/src/api/pppapi.c index 754cdc22..22ffa04f 100644 --- a/src/api/pppapi.c +++ b/src/api/pppapi.c @@ -41,12 +41,63 @@ #include "netif/ppp/pppol2tp.h" #include "netif/ppp/pppos.h" + +#if !LWIP_TCPIP_CORE_LOCKING +#define TCPIP_PPPAPI(m) tcpip_pppapi(m) +#define TCPIP_PPPAPI_ACK(m) sys_sem_signal(&m->sem) + +/** + * Much like tcpip_apimsg, but calls the lower part of a pppapi_* + * function. + * + * @param pppapimsg a struct containing the function to call and its parameters + * @return error code given back by the function that was called + */ +static err_t +tcpip_pppapi(struct pppapi_msg* pppapimsg) +{ + err_t err = sys_sem_new(&pppapimsg->msg.sem, 0); + if (err != ERR_OK) { + pppapimsg->msg.err = err; + return err; + } + + if(tcpip_send_api_msg(pppapimsg->function, &pppapimsg->msg, &pppapimsg->msg.sem) == ERR_OK) { + sys_sem_free(&pppapimsg->msg.sem); + return pppapimsg->msg.err; + } + return ERR_VAL; +} +#else /* !LWIP_TCPIP_CORE_LOCKING */ +#define TCPIP_PPPAPI(m) tcpip_pppapi_lock(m) +#define TCPIP_PPPAPI_ACK(m) + +/** + * Call the lower part of a pppapi_* function + * This function has exclusive access to lwIP core code by locking it + * before the function is called. + * + * @param pppapimsg a struct containing the function to call and its parameters + * @return ERR_OK (only for compatibility fo tcpip_pppapi()) + */ +static err_t +tcpip_pppapi_lock(struct pppapi_msg* pppapimsg) +{ + LOCK_TCPIP_CORE(); + pppapimsg->function(&(pppapimsg->msg)); + UNLOCK_TCPIP_CORE(); + return pppapimsg->msg.err; +} +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + /** * Call ppp_set_default() inside the tcpip_thread context. */ static void -pppapi_do_ppp_set_default(struct pppapi_msg_msg *msg) +pppapi_do_ppp_set_default(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + ppp_set_default(msg->ppp); TCPIP_PPPAPI_ACK(msg); } @@ -69,8 +120,10 @@ pppapi_set_default(ppp_pcb *pcb) * Call ppp_set_auth() inside the tcpip_thread context. */ static void -pppapi_do_ppp_set_auth(struct pppapi_msg_msg *msg) +pppapi_do_ppp_set_auth(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + ppp_set_auth(msg->ppp, msg->msg.setauth.authtype, msg->msg.setauth.user, msg->msg.setauth.passwd); TCPIP_PPPAPI_ACK(msg); @@ -125,8 +178,10 @@ pppapi_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_pha * Call pppos_create() inside the tcpip_thread context. */ static void -pppapi_do_pppos_create(struct pppapi_msg_msg *msg) +pppapi_do_pppos_create(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + msg->ppp = pppos_create(msg->msg.serialcreate.pppif, msg->msg.serialcreate.output_cb, msg->msg.serialcreate.link_status_cb, msg->msg.serialcreate.ctx_cb); TCPIP_PPPAPI_ACK(msg); @@ -157,8 +212,9 @@ pppapi_pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, * Call pppoe_create() inside the tcpip_thread context. */ static void -pppapi_do_pppoe_create(struct pppapi_msg_msg *msg) +pppapi_do_pppoe_create(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; msg->ppp = pppoe_create(msg->msg.ethernetcreate.pppif, msg->msg.ethernetcreate.ethif, msg->msg.ethernetcreate.service_name, msg->msg.ethernetcreate.concentrator_name, @@ -194,8 +250,10 @@ pppapi_pppoe_create(struct netif *pppif, struct netif *ethif, const char *servic * Call pppol2tp_create() inside the tcpip_thread context. */ static void -pppapi_do_pppol2tp_create(struct pppapi_msg_msg *msg) +pppapi_do_pppol2tp_create(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + msg->ppp = pppol2tp_create(msg->msg.l2tpcreate.pppif, msg->msg.l2tpcreate.netif, msg->msg.l2tpcreate.ipaddr, msg->msg.l2tpcreate.port, #if PPPOL2TP_AUTH_SUPPORT @@ -239,8 +297,10 @@ pppapi_pppol2tp_create(struct netif *pppif, struct netif *netif, ip_addr_t *ipad * Call ppp_connect() inside the tcpip_thread context. */ static void -pppapi_do_ppp_connect(struct pppapi_msg_msg *msg) +pppapi_do_ppp_connect(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + msg->err = ppp_connect(msg->ppp, msg->msg.connect.holdoff); TCPIP_PPPAPI_ACK(msg); } @@ -293,8 +353,10 @@ pppapi_listen(ppp_pcb *pcb, struct ppp_addrs *addrs) * Call ppp_close() inside the tcpip_thread context. */ static void -pppapi_do_ppp_close(struct pppapi_msg_msg *msg) +pppapi_do_ppp_close(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + msg->err = ppp_close(msg->ppp, msg->msg.close.nocarrier); TCPIP_PPPAPI_ACK(msg); } @@ -319,8 +381,10 @@ pppapi_close(ppp_pcb *pcb, u8_t nocarrier) * Call ppp_free() inside the tcpip_thread context. */ static void -pppapi_do_ppp_free(struct pppapi_msg_msg *msg) +pppapi_do_ppp_free(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + msg->err = ppp_free(msg->ppp); TCPIP_PPPAPI_ACK(msg); } @@ -344,8 +408,10 @@ pppapi_free(ppp_pcb *pcb) * Call ppp_ioctl() inside the tcpip_thread context. */ static void -pppapi_do_ppp_ioctl(struct pppapi_msg_msg *msg) +pppapi_do_ppp_ioctl(void *m) { + struct pppapi_msg_msg *msg = (struct pppapi_msg_msg *)m; + msg->err = ppp_ioctl(msg->ppp, msg->msg.ioctl.cmd, msg->msg.ioctl.arg); TCPIP_PPPAPI_ACK(msg); } diff --git a/src/api/tcpip.c b/src/api/tcpip.c index 9ae817e5..22f2cbd0 100644 --- a/src/api/tcpip.c +++ b/src/api/tcpip.c @@ -110,17 +110,8 @@ tcpip_thread(void *arg) msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif); memp_free(MEMP_TCPIP_MSG_INPKT, msg); break; - #endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */ - -#if LWIP_PPP_API - case TCPIP_MSG_PPPAPI: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PPP API message %p\n", (void *)msg)); - msg->msg.pppapimsg->function(&(msg->msg.pppapimsg->msg)); - break; -#endif /* LWIP_PPP_API */ - #if LWIP_TCPIP_TIMEOUT case TCPIP_MSG_TIMEOUT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg)); @@ -364,59 +355,8 @@ tcpip_apimsg(struct api_msg *apimsg) } return ERR_VAL; } - #endif /* LWIP_NETCONN || LWIP_SOCKET */ -#if LWIP_PPP_API -#if !LWIP_TCPIP_CORE_LOCKING -/** - * Much like tcpip_apimsg, but calls the lower part of a pppapi_* - * function. - * - * @param pppapimsg a struct containing the function to call and its parameters - * @return error code given back by the function that was called - */ -err_t -tcpip_pppapi(struct pppapi_msg* pppapimsg) -{ - struct tcpip_msg msg; - - if (sys_mbox_valid_val(mbox)) { - err_t err = sys_sem_new(&pppapimsg->msg.sem, 0); - if (err != ERR_OK) { - pppapimsg->msg.err = err; - return err; - } - - msg.type = TCPIP_MSG_PPPAPI; - msg.msg.pppapimsg = pppapimsg; - sys_mbox_post(&mbox, &msg); - sys_sem_wait(&pppapimsg->msg.sem); - sys_sem_free(&pppapimsg->msg.sem); - return pppapimsg->msg.err; - } - return ERR_VAL; -} -#else /* !LWIP_TCPIP_CORE_LOCKING */ -/** - * Call the lower part of a pppapi_* function - * This function has exclusive access to lwIP core code by locking it - * before the function is called. - * - * @param pppapimsg a struct containing the function to call and its parameters - * @return ERR_OK (only for compatibility fo tcpip_pppapi()) - */ -err_t -tcpip_pppapi_lock(struct pppapi_msg* pppapimsg) -{ - LOCK_TCPIP_CORE(); - pppapimsg->function(&(pppapimsg->msg)); - UNLOCK_TCPIP_CORE(); - return pppapimsg->msg.err; -} -#endif /* !LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_PPP_API */ - /** * Allocate a structure for a static callback message and initialize it. * This is intended to be used to send "static" messages from interrupt context. diff --git a/src/include/lwip/pppapi.h b/src/include/lwip/pppapi.h index 6626dbe9..ad65c428 100644 --- a/src/include/lwip/pppapi.h +++ b/src/include/lwip/pppapi.h @@ -111,7 +111,7 @@ struct pppapi_msg_msg { }; struct pppapi_msg { - void (* function)(struct pppapi_msg_msg *msg); + void (* function)(void *msg); struct pppapi_msg_msg msg; }; diff --git a/src/include/lwip/priv/tcpip_priv.h b/src/include/lwip/priv/tcpip_priv.h index fb2d2f1b..f38bdec2 100644 --- a/src/include/lwip/priv/tcpip_priv.h +++ b/src/include/lwip/priv/tcpip_priv.h @@ -38,7 +38,6 @@ #include "lwip/tcpip.h" #include "lwip/priv/api_msg.h" -#include "lwip/pppapi.h" #include "lwip/pbuf.h" #include "lwip/api.h" #include "lwip/sys.h" @@ -82,16 +81,12 @@ extern sys_mutex_t lock_tcpip_core; (e) = (m)->msg.err; \ } while(0) #define TCPIP_APIMSG_ACK(m) NETCONN_SET_SAFE_ERR((m)->conn, (m)->err) -#define TCPIP_PPPAPI(m) tcpip_pppapi_lock(m) -#define TCPIP_PPPAPI_ACK(m) #else /* LWIP_TCPIP_CORE_LOCKING */ #define LOCK_TCPIP_CORE() #define UNLOCK_TCPIP_CORE() #define TCPIP_APIMSG_NOERR(m,f) do { (m)->function = f; tcpip_apimsg(m); } while(0) #define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0) #define TCPIP_APIMSG_ACK(m) do { NETCONN_SET_SAFE_ERR((m)->conn, (m)->err); sys_sem_signal(LWIP_API_MSG_SEM(m)); } while(0) -#define TCPIP_PPPAPI(m) tcpip_pppapi(m) -#define TCPIP_PPPAPI_ACK(m) sys_sem_signal(&m->sem) #endif /* LWIP_TCPIP_CORE_LOCKING */ @@ -131,22 +126,12 @@ extern sys_mutex_t lock_tcpip_core; err_t tcpip_apimsg(struct api_msg *apimsg); #endif /* LWIP_NETCONN || LWIP_SOCKET */ -#if LWIP_PPP_API -err_t tcpip_pppapi(struct pppapi_msg *pppapimsg); -#if LWIP_TCPIP_CORE_LOCKING -err_t tcpip_pppapi_lock(struct pppapi_msg *pppapimsg); -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_PPP_API */ - typedef void (*api_msg_fn)(void *msg); err_t tcpip_send_api_msg(api_msg_fn fn, void *apimsg, sys_sem_t* sem); enum tcpip_msg_type { TCPIP_MSG_API, TCPIP_MSG_INPKT, -#if LWIP_PPP_API - TCPIP_MSG_PPPAPI, -#endif /* LWIP_PPP_API */ #if LWIP_TCPIP_TIMEOUT TCPIP_MSG_TIMEOUT, TCPIP_MSG_UNTIMEOUT, @@ -162,9 +147,6 @@ struct tcpip_msg { api_msg_fn function; void* msg; } api; -#if LWIP_PPP_API - struct pppapi_msg *pppapimsg; -#endif /* LWIP_PPP_API */ struct { struct pbuf *p; struct netif *netif;