mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-03 21:32:08 +00:00
Decouple tcpip.c/tcpip_priv.h from PPP API
PPP API can now be moved to netif/ppp subdir
This commit is contained in:
parent
af1978fa4e
commit
18bb74e5c5
@ -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);
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user