Decouple tcpip.c/tcpip_priv.h from PPP API

PPP API can now be moved to netif/ppp subdir
This commit is contained in:
Dirk Ziegelmeier 2016-03-07 20:06:47 +01:00
parent af1978fa4e
commit 18bb74e5c5
4 changed files with 76 additions and 88 deletions

View File

@ -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);
}

View File

@ -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.

View File

@ -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;
};

View File

@ -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;