diff --git a/src/include/netif/ppp/ppp.h b/src/include/netif/ppp/ppp.h index 6d24770f..ec5eaf4f 100644 --- a/src/include/netif/ppp/ppp.h +++ b/src/include/netif/ppp/ppp.h @@ -303,19 +303,13 @@ struct ppp_addrs { /* * PPP interface control block. */ -typedef int (*link_command_cb_fn)(void *pcb, u8_t command); -typedef int (*link_write_cb_fn)(void *pcb, struct pbuf *p); -typedef err_t (*link_netif_output_cb_fn)(void *pcb, struct pbuf *p, u_short protocol); - struct ppp_pcb_s { /* -- below are data that will NOT be cleared between two sessions */ #if PPP_DEBUG u8_t num; /* Interface number - only useful for debugging */ #endif /* PPP_DEBUG */ ppp_settings settings; - link_command_cb_fn link_command_cb; - link_write_cb_fn link_write_cb; - link_netif_output_cb_fn link_netif_output_cb; + const struct link_callbacks *link_cb; void *link_ctx_cb; void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */ #if PPP_NOTIFY_PHASE diff --git a/src/include/netif/ppp/ppp_impl.h b/src/include/netif/ppp/ppp_impl.h index 33e2f3d3..fb5f0393 100644 --- a/src/include/netif/ppp/ppp_impl.h +++ b/src/include/netif/ppp/ppp_impl.h @@ -93,16 +93,6 @@ */ #define PPP_LINK_ENABLED_NUMBER (!!PPPOS_SUPPORT+!!PPPOE_SUPPORT+!!PPPOL2TP_SUPPORT) -/* - * Low-level links commands - */ -/* Start a connection (i.e. initiate discovery phase) */ -#define PPP_LINK_COMMAND_CONNECT 0 -/* End a connection (i.e. initiate disconnect phase) */ -#define PPP_LINK_COMMAND_DISCONNECT 1 -/* Free link connection */ -#define PPP_LINK_COMMAND_FREE 2 - /* * Protocol field values. */ @@ -152,6 +142,23 @@ #define PPP_EAP 0xc227 /* Extensible Authentication Protocol */ #endif /* EAP_SUPPORT */ +/* + * The following struct gives the addresses of procedures to call + * for a particular lower link level protocol. + */ +struct link_callbacks { + /* Start a connection (e.g. Initiate discovery phase) */ + err_t (*connect) (ppp_pcb *pcb, void *ctx); + /* End a connection (i.e. initiate disconnect phase) */ + void (*disconnect) (ppp_pcb *pcb, void *ctx); + /* Free lower protocol control block */ + err_t (*free) (ppp_pcb *pcb, void *ctx); + /* Write a pbuf to a ppp link, only used from PPP functions to send PPP packets. */ + err_t (*write)(ppp_pcb *pcb, void *ctx, struct pbuf *p); + /* Send a packet from lwIP core (IPv4 or IPv6) */ + err_t (*netif_output)(ppp_pcb *pcb, void *ctx, struct pbuf *p, u_short protocol); +}; + /* * What to do with network protocol (NP) packets. */ @@ -380,8 +387,8 @@ ppp_pcb *ppp_new(struct netif *pppif, ppp_link_status_cb_fn link_status_cb, void /* Set a PPP PCB to its initial state */ void ppp_clear(ppp_pcb *pcb); -/* Set link callback function */ -void ppp_link_set_callbacks(ppp_pcb *pcb, link_command_cb_fn command, link_write_cb_fn write, link_netif_output_cb_fn netif_output, void *ctx); +/* Set link callback functions */ +void ppp_link_set_callbacks(ppp_pcb *pcb, const struct link_callbacks *callbacks, void *ctx); /* Initiate LCP open request */ void ppp_start(ppp_pcb *pcb); diff --git a/src/netif/ppp/ppp.c b/src/netif/ppp/ppp.c index 587a8dd2..76cab5d7 100644 --- a/src/netif/ppp/ppp.c +++ b/src/netif/ppp/ppp.c @@ -258,7 +258,7 @@ int ppp_open(ppp_pcb *pcb, u16_t holdoff) { PPPDEBUG(LOG_DEBUG, ("ppp_open() called, holdoff=%d\n", holdoff)); if (holdoff == 0) { - return pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_CONNECT); + return pcb->link_cb->connect(pcb, pcb->link_ctx_cb); } new_phase(pcb, PPP_PHASE_HOLDOFF); @@ -329,7 +329,7 @@ int ppp_free(ppp_pcb *pcb) { netif_remove(pcb->netif); - err = pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_FREE); + err = pcb->link_cb->free(pcb, pcb->link_ctx_cb); memp_free(MEMP_PPP_PCB, pcb); return err; @@ -425,7 +425,7 @@ static void ppp_do_open(void *arg) { LWIP_ASSERT("pcb->phase == PPP_PHASE_DEAD || pcb->phase == PPP_PHASE_HOLDOFF", pcb->phase == PPP_PHASE_DEAD || pcb->phase == PPP_PHASE_HOLDOFF); - pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_CONNECT); + pcb->link_cb->connect(pcb, pcb->link_ctx_cb); } /* @@ -491,7 +491,7 @@ static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u_short prot return ERR_RTE; } - return pcb->link_netif_output_cb(pcb->link_ctx_cb, pb, protocol); + return pcb->link_cb->netif_output(pcb, pcb->link_ctx_cb, pb, protocol); } @@ -614,10 +614,8 @@ void ppp_clear(ppp_pcb *pcb) { new_phase(pcb, PPP_PHASE_INITIALIZE); } -void ppp_link_set_callbacks(ppp_pcb *pcb, link_command_cb_fn command, link_write_cb_fn write, link_netif_output_cb_fn netif_output, void *ctx) { - pcb->link_command_cb = command; - pcb->link_write_cb = write; - pcb->link_netif_output_cb = netif_output; +void ppp_link_set_callbacks(ppp_pcb *pcb, const struct link_callbacks *callbacks, void *ctx) { + pcb->link_cb = callbacks; pcb->link_ctx_cb = ctx; } @@ -809,7 +807,7 @@ int ppp_write(ppp_pcb *pcb, struct pbuf *p) { #if PRINTPKT_SUPPORT ppp_dump_packet("sent", (unsigned char *)p->payload+2, p->len-2); #endif /* PRINTPKT_SUPPORT */ - return pcb->link_write_cb(pcb->link_ctx_cb, p); + return pcb->link_cb->write(pcb, pcb->link_ctx_cb, p); } /* merge a pbuf chain into one pbuf */ @@ -840,7 +838,7 @@ struct pbuf * ppp_singlebuf(struct pbuf *p) { void ppp_link_terminated(ppp_pcb *pcb) { PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated: unit %d\n", pcb->num)); - pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_DISCONNECT); + pcb->link_cb->disconnect(pcb, pcb->link_ctx_cb); PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated: finished.\n")); } diff --git a/src/netif/ppp/pppoe.c b/src/netif/ppp/pppoe.c index 77a6d69a..0caa005a 100644 --- a/src/netif/ppp/pppoe.c +++ b/src/netif/ppp/pppoe.c @@ -117,14 +117,13 @@ static char pppoe_error_tmp[PPPOE_ERRORSTRING_LEN]; /* callbacks called from PPP core */ -static int pppoe_link_command_callback(void *pcb, u8_t command); -static int pppoe_link_write_callback(void *pcb, struct pbuf *p); -static err_t pppoe_link_netif_output_callback(void *pcb, struct pbuf *p, u_short protocol); +static err_t pppoe_link_write_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p); +static err_t pppoe_link_netif_output_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol); +static err_t pppoe_connect(ppp_pcb *ppp, void *ctx); +static void pppoe_disconnect(ppp_pcb *ppp, void *ctx); +static err_t pppoe_destroy(ppp_pcb *ppp, void *ctx); /* management routines */ -static err_t pppoe_destroy(struct pppoe_softc *sc); -static int pppoe_connect(struct pppoe_softc *sc); -static void pppoe_disconnect(struct pppoe_softc *sc); static void pppoe_abort_connect(struct pppoe_softc *); static void pppoe_clear_softc(struct pppoe_softc *, const char *); @@ -148,6 +147,15 @@ static struct pppoe_softc* pppoe_find_softc_by_hunique(u8_t *token, size_t len, /** linked list of created pppoe interfaces */ static struct pppoe_softc *pppoe_softc_list; +/* Callbacks structure for PPP core */ +static const struct link_callbacks pppoe_callbacks = { + pppoe_connect, + pppoe_disconnect, + pppoe_destroy, + pppoe_link_write_callback, + pppoe_link_netif_output_callback +}; + /* * Create a new PPP Over Ethernet (PPPoE) connection. * @@ -185,35 +193,13 @@ ppp_pcb *pppoe_create(struct netif *pppif, sc->next = pppoe_softc_list; pppoe_softc_list = sc; - ppp_link_set_callbacks(ppp, pppoe_link_command_callback, pppoe_link_write_callback, pppoe_link_netif_output_callback, sc); + ppp_link_set_callbacks(ppp, &pppoe_callbacks, sc); return ppp; } /* Called by PPP core */ -static int pppoe_link_command_callback(void *pcb, u8_t command) { - struct pppoe_softc *sc = (struct pppoe_softc *)pcb; - - switch(command) { - case PPP_LINK_COMMAND_CONNECT: - return pppoe_connect(sc); - - case PPP_LINK_COMMAND_DISCONNECT: - pppoe_disconnect(sc); - break; - - case PPP_LINK_COMMAND_FREE: - return pppoe_destroy(sc); - - default: ; - } - - return PPPERR_NONE; -} - -/* Called by PPP core */ -static int pppoe_link_write_callback(void *pcb, struct pbuf *p) { - struct pppoe_softc *sc = (struct pppoe_softc *)pcb; - ppp_pcb *ppp = sc->pcb; +static err_t pppoe_link_write_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p) { + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; struct pbuf *ph; /* Ethernet + PPPoE header */ #if LWIP_SNMP u16_t tot_len; @@ -252,9 +238,8 @@ static int pppoe_link_write_callback(void *pcb, struct pbuf *p) { } /* Called by PPP core */ -static err_t pppoe_link_netif_output_callback(void *pcb, struct pbuf *p, u_short protocol) { - struct pppoe_softc *sc = (struct pppoe_softc *)pcb; - ppp_pcb *ppp = sc->pcb; +static err_t pppoe_link_netif_output_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol) { + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; struct pbuf *pb; int i=0; #if LWIP_SNMP @@ -298,9 +283,11 @@ static err_t pppoe_link_netif_output_callback(void *pcb, struct pbuf *p, u_short } static err_t -pppoe_destroy(struct pppoe_softc *sc) +pppoe_destroy(ppp_pcb *ppp, void *ctx) { + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; struct pppoe_softc **copp, *freep; + LWIP_UNUSED_ARG(ppp); sys_untimeout(pppoe_timeout, sc); @@ -906,11 +893,11 @@ pppoe_timeout(void *arg) } /* Start a connection (i.e. initiate discovery phase) */ -static int -pppoe_connect(struct pppoe_softc *sc) +static err_t +pppoe_connect(ppp_pcb *ppp, void *ctx) { int err; - ppp_pcb *ppp = sc->pcb; + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; lcp_options *lcp_wo; lcp_options *lcp_ao; ipcp_options *ipcp_wo; @@ -965,8 +952,10 @@ pppoe_connect(struct pppoe_softc *sc) /* disconnect */ static void -pppoe_disconnect(struct pppoe_softc *sc) +pppoe_disconnect(ppp_pcb *ppp, void *ctx) { + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; + if (sc->sc_state < PPPOE_STATE_SESSION) { return; } @@ -989,7 +978,7 @@ pppoe_disconnect(struct pppoe_softc *sc) sc->sc_padi_retried = 0; sc->sc_padr_retried = 0; - ppp_link_end(sc->pcb); /* notify upper layers */ + ppp_link_end(ppp); /* notify upper layers */ return; } diff --git a/src/netif/ppp/pppol2tp.c b/src/netif/ppp/pppol2tp.c index 08dd0e12..7c920ad2 100644 --- a/src/netif/ppp/pppol2tp.c +++ b/src/netif/ppp/pppol2tp.c @@ -75,14 +75,13 @@ #endif /* PPPOL2TP_AUTH_SUPPORT */ /* callbacks called from PPP core */ -static int pppol2tp_link_command_callback(void *pcb, u8_t command); -static int pppol2tp_link_write_callback(void *pcb, struct pbuf *p); -static err_t pppol2tp_link_netif_output_callback(void *pcb, struct pbuf *p, u_short protocol); +static err_t pppol2tp_link_write_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p); +static err_t pppol2tp_link_netif_output_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol); +static err_t pppol2tp_destroy(ppp_pcb *ppp, void *ctx); /* Destroy a L2TP control block */ +static err_t pppol2tp_connect(ppp_pcb *ppp, void *ctx); /* Be a LAC, connect to a LNS. */ +static void pppol2tp_disconnect(ppp_pcb *ppp, void *ctx); /* Disconnect */ /* Prototypes for procedures local to this file. */ -static err_t pppol2tp_destroy(pppol2tp_pcb *l2tp); /* Destroy a L2TP control block */ -static err_t pppol2tp_connect(pppol2tp_pcb *l2tp); /* Be a LAC, connect to a LNS. */ -static void pppol2tp_disconnect(pppol2tp_pcb *l2tp); /* Disconnect */ static void pppol2tp_input(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); static void pppol2tp_dispatch_control_packet(pppol2tp_pcb *l2tp, struct ip_addr *addr, u16_t port, struct pbuf *p, u16_t len, u16_t tunnel_id, u16_t session_id, u16_t ns, u16_t nr); @@ -97,6 +96,15 @@ static err_t pppol2tp_send_zlb(pppol2tp_pcb *l2tp, u16_t ns); static err_t pppol2tp_send_stopccn(pppol2tp_pcb *l2tp, u16_t ns); static err_t pppol2tp_xmit(pppol2tp_pcb *l2tp, struct pbuf *pb); +/* Callbacks structure for PPP core */ +static const struct link_callbacks pppol2tp_callbacks = { + pppol2tp_connect, + pppol2tp_disconnect, + pppol2tp_destroy, + pppol2tp_link_write_callback, + pppol2tp_link_netif_output_callback +}; + /* Create a new L2TP session. */ ppp_pcb *pppol2tp_create(struct netif *pppif, @@ -138,35 +146,13 @@ ppp_pcb *pppol2tp_create(struct netif *pppif, l2tp->secret_len = secret_len; #endif /* PPPOL2TP_AUTH_SUPPORT */ - ppp_link_set_callbacks(ppp, pppol2tp_link_command_callback, pppol2tp_link_write_callback, pppol2tp_link_netif_output_callback, l2tp); + ppp_link_set_callbacks(ppp, &pppol2tp_callbacks, l2tp); return ppp; } /* Called by PPP core */ -static int pppol2tp_link_command_callback(void *pcb, u8_t command) { - pppol2tp_pcb *l2tp = (pppol2tp_pcb *)pcb; - - switch(command) { - case PPP_LINK_COMMAND_CONNECT: - return pppol2tp_connect(l2tp); - - case PPP_LINK_COMMAND_DISCONNECT: - pppol2tp_disconnect(l2tp); - break; - - case PPP_LINK_COMMAND_FREE: - return pppol2tp_destroy(l2tp); - - default: ; - } - - return PPPERR_NONE; -} - -/* Called by PPP core */ -static int pppol2tp_link_write_callback(void *pcb, struct pbuf *p) { - pppol2tp_pcb *l2tp = (pppol2tp_pcb *)pcb; - ppp_pcb *ppp = l2tp->ppp; +static err_t pppol2tp_link_write_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; struct pbuf *ph; /* UDP + L2TP header */ #if LWIP_SNMP u16_t tot_len; @@ -202,9 +188,8 @@ static int pppol2tp_link_write_callback(void *pcb, struct pbuf *p) { } /* Called by PPP core */ -static err_t pppol2tp_link_netif_output_callback(void *pcb, struct pbuf *p, u_short protocol) { - pppol2tp_pcb *l2tp = (pppol2tp_pcb *)pcb; - ppp_pcb *ppp = l2tp->ppp; +static err_t pppol2tp_link_netif_output_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; struct pbuf *pb; int i=0; #if LWIP_SNMP @@ -248,7 +233,9 @@ static err_t pppol2tp_link_netif_output_callback(void *pcb, struct pbuf *p, u_sh } /* Destroy a L2TP control block */ -static err_t pppol2tp_destroy(pppol2tp_pcb *l2tp) { +static err_t pppol2tp_destroy(ppp_pcb *ppp, void *ctx) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; + LWIP_UNUSED_ARG(ppp); sys_untimeout(pppol2tp_timeout, l2tp); if (l2tp->udp != NULL) { @@ -259,9 +246,9 @@ static err_t pppol2tp_destroy(pppol2tp_pcb *l2tp) { } /* Be a LAC, connect to a LNS. */ -static err_t pppol2tp_connect(pppol2tp_pcb *l2tp) { +static err_t pppol2tp_connect(ppp_pcb *ppp, void *ctx) { err_t err; - ppp_pcb *ppp = l2tp->ppp; + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; lcp_options *lcp_wo; lcp_options *lcp_ao; ipcp_options *ipcp_wo; @@ -321,7 +308,8 @@ static err_t pppol2tp_connect(pppol2tp_pcb *l2tp) { } /* Disconnect */ -static void pppol2tp_disconnect(pppol2tp_pcb *l2tp) { +static void pppol2tp_disconnect(ppp_pcb *ppp, void *ctx) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; if (l2tp->phase < PPPOL2TP_STATE_DATA) { return; @@ -331,7 +319,7 @@ static void pppol2tp_disconnect(pppol2tp_pcb *l2tp) { pppol2tp_send_stopccn(l2tp, l2tp->our_ns); pppol2tp_clear(l2tp); - ppp_link_end(l2tp->ppp); /* notify upper layers */ + ppp_link_end(ppp); /* notify upper layers */ } /* UDP Callback for incoming L2TP frames */ diff --git a/src/netif/ppp/pppos.c b/src/netif/ppp/pppos.c index 0640679d..4709766e 100644 --- a/src/netif/ppp/pppos.c +++ b/src/netif/ppp/pppos.c @@ -82,14 +82,13 @@ static u8_t pppos_exist(pppos_pcb *pppos); #endif /* PPPOS_PCB_LIST */ /* callbacks called from PPP core */ -static int pppos_link_command_callback(void *pcb, u8_t command); -static int pppos_link_write_callback(void *pcb, struct pbuf *p); -static err_t pppos_link_netif_output_callback(void *pcb, struct pbuf *pb, u_short protocol); +static err_t pppos_link_write_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p); +static err_t pppos_link_netif_output_callback(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u_short protocol); +static err_t pppos_connect(ppp_pcb *ppp, void *ctx); +static void pppos_disconnect(ppp_pcb *ppp, void *ctx); +static err_t pppos_destroy(ppp_pcb *ppp, void *ctx); /* Prototypes for procedures local to this file. */ -static void pppos_connect(pppos_pcb *pppos); -static void pppos_disconnect(pppos_pcb *pppos); -static err_t pppos_destroy(pppos_pcb *pppos); #if PPP_INPROC_MULTITHREADED static void pppos_input_callback(void *arg); #endif /* PPP_INPROC_MULTITHREADED */ @@ -98,6 +97,15 @@ static void pppos_free_current_input_packet(pppos_pcb *pppos); static struct pbuf *pppos_append(u_char c, struct pbuf *nb, ext_accm *out_accm); static void pppos_drop(pppos_pcb *pppos); +/* Callbacks structure for PPP core */ +static const struct link_callbacks pppos_callbacks = { + pppos_connect, + pppos_disconnect, + pppos_destroy, + pppos_link_write_callback, + pppos_link_netif_output_callback +}; + /* PPP's Asynchronous-Control-Character-Map. The mask array is used * to select the specific bit for a character. */ static const u_char ppp_accm_mask[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; @@ -200,40 +208,15 @@ ppp_pcb *pppos_create(struct netif *pppif, sio_fd_t fd, pppos->ppp = ppp; pppos->fd = fd; - ppp_link_set_callbacks(ppp, pppos_link_command_callback, pppos_link_write_callback, pppos_link_netif_output_callback, pppos); + ppp_link_set_callbacks(ppp, &pppos_callbacks, pppos); return ppp; } /* Called by PPP core */ -static int -pppos_link_command_callback(void *pcb, u8_t command) +static err_t +pppos_link_write_callback(ppp_pcb *ppp, void *ctx, struct pbuf *p) { - pppos_pcb *pppos = (pppos_pcb *)pcb; - - switch(command) { - case PPP_LINK_COMMAND_CONNECT: - pppos_connect(pppos); - break; - - case PPP_LINK_COMMAND_DISCONNECT: - pppos_disconnect(pppos); - break; - - case PPP_LINK_COMMAND_FREE: - return pppos_destroy(pppos); - - default: ; - } - - return PPPERR_NONE; -} - -/* Called by PPP core */ -static int -pppos_link_write_callback(void *pcb, struct pbuf *p) -{ - pppos_pcb *pppos = (pppos_pcb *)pcb; - ppp_pcb *ppp = pppos->ppp; + pppos_pcb *pppos = (pppos_pcb *)ctx; u_char *s = (u_char*)p->payload; int n = p->len; u_char c; @@ -300,10 +283,9 @@ pppos_link_write_callback(void *pcb, struct pbuf *p) /* Called by PPP core */ static err_t -pppos_link_netif_output_callback(void *pcb, struct pbuf *pb, u_short protocol) +pppos_link_netif_output_callback(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u_short protocol) { - pppos_pcb *pppos = (pppos_pcb *)pcb; - ppp_pcb *ppp = pppos->ppp; + pppos_pcb *pppos = (pppos_pcb *)ctx; u_int fcs_out = PPP_INITFCS; struct pbuf *head = NULL, *tail = NULL, *p; u_char c; @@ -427,10 +409,10 @@ pppos_exist(pppos_pcb *pppos) } #endif /* PPPOS_PCB_LIST */ -static void -pppos_connect(pppos_pcb *pppos) +static err_t +pppos_connect(ppp_pcb *ppp, void *ctx) { - ppp_pcb *ppp = pppos->ppp; + pppos_pcb *pppos = (pppos_pcb *)ctx; #if !VJ_SUPPORT ipcp_options *ipcp_wo; ipcp_options *ipcp_ao; @@ -468,12 +450,13 @@ pppos_connect(pppos_pcb *pppos) */ PPPDEBUG(LOG_INFO, ("pppos_connect: unit %d: connecting\n", ppp->num)); ppp_start(ppp); /* notify upper layers */ + return ERR_OK; } static void -pppos_disconnect(pppos_pcb *pppos) +pppos_disconnect(ppp_pcb *ppp, void *ctx) { - ppp_pcb *ppp = pppos->ppp; + LWIP_UNUSED_ARG(ctx); /* We cannot call ppp_free_current_input_packet() here because * rx thread might still call pppos_input() @@ -482,11 +465,15 @@ pppos_disconnect(pppos_pcb *pppos) } static err_t -pppos_destroy(pppos_pcb *pppos) +pppos_destroy(ppp_pcb *ppp, void *ctx) { + pppos_pcb *pppos = (pppos_pcb *)ctx; #if PPPOS_PCB_LIST pppos_pcb **copp, *freep; +#endif /* PPPOS_PCB_LIST */ + LWIP_UNUSED_ARG(ppp); +#if PPPOS_PCB_LIST /* remove interface from list */ for (copp = &pppos_pcb_list; (freep = *copp); copp = &freep->next) { if (freep == pppos) {