task #13907: PPP cleanups: Move PPP mempools out of lwIP core to PPP code

This commit is contained in:
Dirk Ziegelmeier 2016-04-25 19:52:07 +02:00
parent b8b83c2994
commit ffa340a68c
9 changed files with 63 additions and 33 deletions

View File

@ -61,6 +61,7 @@
#include "lwip/api.h" #include "lwip/api.h"
#include "netif/ppp/ppp_opts.h" #include "netif/ppp/ppp_opts.h"
#include "netif/ppp/ppp_impl.h"
/* Compile-time sanity checks for configuration errors. /* Compile-time sanity checks for configuration errors.
* These can be done independently of LWIP_DEBUG, without penalty. * These can be done independently of LWIP_DEBUG, without penalty.
@ -346,6 +347,9 @@ lwip_init(void)
#if LWIP_DNS #if LWIP_DNS
dns_init(); dns_init();
#endif /* LWIP_DNS */ #endif /* LWIP_DNS */
#if PPP_SUPPORT
ppp_init();
#endif
#if LWIP_TIMERS #if LWIP_TIMERS
sys_timeouts_init(); sys_timeouts_init();

View File

@ -55,10 +55,6 @@
#include "lwip/ip_frag.h" #include "lwip/ip_frag.h"
#include "lwip/dns.h" #include "lwip/dns.h"
#include "lwip/netdb.h" #include "lwip/netdb.h"
#include "netif/ppp/ppp.h"
#include "netif/ppp/pppos.h"
#include "netif/ppp/pppoe.h"
#include "netif/ppp/pppol2tp.h"
#include "lwip/nd6.h" #include "lwip/nd6.h"
#include "lwip/ip6_frag.h" #include "lwip/ip6_frag.h"
#include "lwip/mld6.h" #include "lwip/mld6.h"

View File

@ -33,9 +33,6 @@
#ifndef LWIP_HDR_MEMP_H #ifndef LWIP_HDR_MEMP_H
#define LWIP_HDR_MEMP_H #define LWIP_HDR_MEMP_H
/* needed by memp_std.h */
#include "netif/ppp/ppp_opts.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif

View File

@ -94,19 +94,6 @@ LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE,
LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST") LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST")
#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ #endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
#if PPP_SUPPORT
LWIP_MEMPOOL(PPP_PCB, MEMP_NUM_PPP_PCB, sizeof(ppp_pcb), "PPP_PCB")
#if PPPOS_SUPPORT
LWIP_MEMPOOL(PPPOS_PCB, MEMP_NUM_PPPOS_INTERFACES, sizeof(pppos_pcb), "PPPOS_PCB")
#endif /* PPPOS_SUPPORT */
#if PPPOE_SUPPORT
LWIP_MEMPOOL(PPPOE_IF, MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc), "PPPOE_IF")
#endif /* PPPOE_SUPPORT */
#if PPPOL2TP_SUPPORT
LWIP_MEMPOOL(PPPOL2TP_PCB, MEMP_NUM_PPPOL2TP_INTERFACES, sizeof(pppol2tp_pcb), "PPPOL2TP_PCB")
#endif /* PPPOL2TP_SUPPORT */
#endif /* PPP_SUPPORT */
#if LWIP_IPV6 && LWIP_ND6_QUEUEING #if LWIP_IPV6 && LWIP_ND6_QUEUEING
LWIP_MEMPOOL(ND6_QUEUE, MEMP_NUM_ND6_QUEUE, sizeof(struct nd6_q_entry), "ND6_QUEUE") LWIP_MEMPOOL(ND6_QUEUE, MEMP_NUM_ND6_QUEUE, sizeof(struct nd6_q_entry), "ND6_QUEUE")
#endif /* LWIP_IPV6 && LWIP_ND6_QUEUEING */ #endif /* LWIP_IPV6 && LWIP_ND6_QUEUEING */

View File

@ -379,6 +379,13 @@ struct pppd_stats {
*/ */
/*
* Functions called from lwIP core.
*/
/* initialize the PPP subsystem */
int ppp_init(void);
/* /*
* Functions called from PPP link protocols. * Functions called from PPP link protocols.
*/ */

View File

@ -135,6 +135,18 @@
/*** LOCAL DEFINITIONS ***/ /*** LOCAL DEFINITIONS ***/
/*************************/ /*************************/
/* Memory pools */
#if PPPOS_SUPPORT
LWIP_MEMPOOL_PROTOTYPE(PPPOS_PCB);
#endif
#if PPPOE_SUPPORT
LWIP_MEMPOOL_PROTOTYPE(PPPOE_IF);
#endif
#if PPPOL2TP_SUPPORT
LWIP_MEMPOOL_PROTOTYPE(PPPOL2TP_PCB);
#endif
LWIP_MEMPOOL_DECLARE(PPP_PCB, MEMP_NUM_PPP_PCB, sizeof(ppp_pcb), "PPP_PCB")
/* FIXME: add stats per PPP session */ /* FIXME: add stats per PPP session */
#if PPP_STATS_SUPPORT #if PPP_STATS_SUPPORT
static struct timeval start_time; /* Time when link was started. */ static struct timeval start_time; /* Time when link was started. */
@ -352,7 +364,7 @@ err_t ppp_free(ppp_pcb *pcb) {
err = pcb->link_cb->free(pcb, pcb->link_ctx_cb); err = pcb->link_cb->free(pcb, pcb->link_ctx_cb);
memp_free(MEMP_PPP_PCB, pcb); LWIP_MEMPOOL_FREE(PPP_PCB, pcb);
return err; return err;
} }
@ -561,6 +573,24 @@ err:
/*** PRIVATE FUNCTION DEFINITIONS ***/ /*** PRIVATE FUNCTION DEFINITIONS ***/
/************************************/ /************************************/
/* Initialize the PPP subsystem. */
int ppp_init(void)
{
#if PPPOS_SUPPORT
LWIP_MEMPOOL_INIT(PPPOS_PCB);
#endif
#if PPPOE_SUPPORT
LWIP_MEMPOOL_INIT(PPPOE_IF);
#endif
#if PPPOL2TP_SUPPORT
LWIP_MEMPOOL_INIT(PPPOL2TP_PCB);
#endif
LWIP_MEMPOOL_INIT(PPP_PCB);
return 0;
}
/* /*
* Create a new PPP control block. * Create a new PPP control block.
* *
@ -579,7 +609,7 @@ ppp_pcb *ppp_new(struct netif *pppif, const struct link_callbacks *callbacks, vo
return NULL; return NULL;
} }
pcb = (ppp_pcb*)memp_malloc(MEMP_PPP_PCB); pcb = (ppp_pcb*)LWIP_MEMPOOL_ALLOC(PPP_PCB);
if (pcb == NULL) { if (pcb == NULL) {
return NULL; return NULL;
} }
@ -636,7 +666,7 @@ ppp_pcb *ppp_new(struct netif *pppif, const struct link_callbacks *callbacks, vo
IP4_ADDR_ANY, IP4_ADDR_BROADCAST, IP4_ADDR_ANY, IP4_ADDR_ANY, IP4_ADDR_BROADCAST, IP4_ADDR_ANY,
#endif /* LWIP_IPV4 */ #endif /* LWIP_IPV4 */
(void *)pcb, ppp_netif_init_cb, NULL)) { (void *)pcb, ppp_netif_init_cb, NULL)) {
memp_free(MEMP_PPP_PCB, pcb); LWIP_MEMPOOL_FREE(PPP_PCB, pcb);
PPPDEBUG(LOG_ERR, ("ppp_new: netif_add failed\n")); PPPDEBUG(LOG_ERR, ("ppp_new: netif_add failed\n"));
return NULL; return NULL;
} }

View File

@ -86,6 +86,9 @@
#include "netif/ppp/ipcp.h" #include "netif/ppp/ipcp.h"
#include "netif/ppp/pppoe.h" #include "netif/ppp/pppoe.h"
/* Memory pool */
LWIP_MEMPOOL_DECLARE(PPPOE_IF, MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc), "PPPOE_IF")
/* Add a 16 bit unsigned value to a buffer pointed to by PTR */ /* Add a 16 bit unsigned value to a buffer pointed to by PTR */
#define PPPOE_ADD_16(PTR, VAL) \ #define PPPOE_ADD_16(PTR, VAL) \
*(PTR)++ = (u8_t)((VAL) / 256); \ *(PTR)++ = (u8_t)((VAL) / 256); \
@ -174,14 +177,14 @@ ppp_pcb *pppoe_create(struct netif *pppif,
LWIP_UNUSED_ARG(service_name); LWIP_UNUSED_ARG(service_name);
LWIP_UNUSED_ARG(concentrator_name); LWIP_UNUSED_ARG(concentrator_name);
sc = (struct pppoe_softc *)memp_malloc(MEMP_PPPOE_IF); sc = (struct pppoe_softc *)LWIP_MEMPOOL_ALLOC(PPPOE_IF);
if (sc == NULL) { if (sc == NULL) {
return NULL; return NULL;
} }
ppp = ppp_new(pppif, &pppoe_callbacks, sc, link_status_cb, ctx_cb); ppp = ppp_new(pppif, &pppoe_callbacks, sc, link_status_cb, ctx_cb);
if (ppp == NULL) { if (ppp == NULL) {
memp_free(MEMP_PPPOE_IF, sc); LWIP_MEMPOOL_FREE(PPPOE_IF, sc);
return NULL; return NULL;
} }
@ -306,7 +309,7 @@ pppoe_destroy(ppp_pcb *ppp, void *ctx)
mem_free(sc->sc_service_name); mem_free(sc->sc_service_name);
} }
#endif /* PPPOE_TODO */ #endif /* PPPOE_TODO */
memp_free(MEMP_PPPOE_IF, sc); LWIP_MEMPOOL_FREE(PPPOE_IF, sc);
return ERR_OK; return ERR_OK;
} }

View File

@ -74,6 +74,9 @@
#endif #endif
#endif /* PPPOL2TP_AUTH_SUPPORT */ #endif /* PPPOL2TP_AUTH_SUPPORT */
/* Memory pool */
LWIP_MEMPOOL_DECLARE(PPPOL2TP_PCB, MEMP_NUM_PPPOL2TP_INTERFACES, sizeof(pppol2tp_pcb), "PPPOL2TP_PCB")
/* callbacks called from PPP core */ /* callbacks called from PPP core */
static err_t pppol2tp_write(ppp_pcb *ppp, void *ctx, struct pbuf *p); static err_t pppol2tp_write(ppp_pcb *ppp, void *ctx, struct pbuf *p);
static err_t pppol2tp_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol); static err_t pppol2tp_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol);
@ -124,7 +127,7 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
goto ipaddr_check_failed; goto ipaddr_check_failed;
} }
l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB); l2tp = (pppol2tp_pcb *)LWIP_MEMPOOL_ALLOC(PPPOL2TP_PCB);
if (l2tp == NULL) { if (l2tp == NULL) {
goto memp_malloc_l2tp_failed; goto memp_malloc_l2tp_failed;
} }
@ -157,7 +160,7 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
ppp_new_failed: ppp_new_failed:
udp_remove(udp); udp_remove(udp);
udp_new_failed: udp_new_failed:
memp_free(MEMP_PPPOL2TP_PCB, l2tp); LWIP_MEMPOOL_FREE(PPPOL2TP_PCB, l2tp);
memp_malloc_l2tp_failed: memp_malloc_l2tp_failed:
ipaddr_check_failed: ipaddr_check_failed:
return NULL; return NULL;
@ -254,7 +257,7 @@ static err_t pppol2tp_destroy(ppp_pcb *ppp, void *ctx) {
if (l2tp->udp != NULL) { if (l2tp->udp != NULL) {
udp_remove(l2tp->udp); udp_remove(l2tp->udp);
} }
memp_free(MEMP_PPPOL2TP_PCB, l2tp); LWIP_MEMPOOL_FREE(PPPOL2TP_PCB, l2tp);
return ERR_OK; return ERR_OK;
} }

View File

@ -50,6 +50,9 @@
#include "netif/ppp/pppos.h" #include "netif/ppp/pppos.h"
#include "netif/ppp/vj.h" #include "netif/ppp/vj.h"
/* Memory pool */
LWIP_MEMPOOL_DECLARE(PPPOS_PCB, MEMP_NUM_PPPOS_INTERFACES, sizeof(pppos_pcb), "PPPOS_PCB")
/* callbacks called from PPP core */ /* callbacks called from PPP core */
static err_t pppos_write(ppp_pcb *ppp, void *ctx, struct pbuf *p); static err_t pppos_write(ppp_pcb *ppp, void *ctx, struct pbuf *p);
static err_t pppos_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u16_t protocol); static err_t pppos_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u16_t protocol);
@ -173,14 +176,14 @@ ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb,
pppos_pcb *pppos; pppos_pcb *pppos;
ppp_pcb *ppp; ppp_pcb *ppp;
pppos = (pppos_pcb *)memp_malloc(MEMP_PPPOS_PCB); pppos = (pppos_pcb *)LWIP_MEMPOOL_ALLOC(PPPOS_PCB);
if (pppos == NULL) { if (pppos == NULL) {
return NULL; return NULL;
} }
ppp = ppp_new(pppif, &pppos_callbacks, pppos, link_status_cb, ctx_cb); ppp = ppp_new(pppif, &pppos_callbacks, pppos, link_status_cb, ctx_cb);
if (ppp == NULL) { if (ppp == NULL) {
memp_free(MEMP_PPPOS_PCB, pppos); LWIP_MEMPOOL_FREE(PPPOS_PCB, pppos);
return NULL; return NULL;
} }
@ -421,7 +424,7 @@ pppos_destroy(ppp_pcb *ppp, void *ctx)
pppos_input_free_current_packet(pppos); pppos_input_free_current_packet(pppos);
#endif /* PPP_INPROC_IRQ_SAFE */ #endif /* PPP_INPROC_IRQ_SAFE */
memp_free(MEMP_PPPOS_PCB, pppos); LWIP_MEMPOOL_FREE(PPPOS_PCB, pppos);
return ERR_OK; return ERR_OK;
} }