From 09b4485870c402ae3c88b8b5034f290bf0201d47 Mon Sep 17 00:00:00 2001 From: Sylvain Rochet Date: Sun, 15 Feb 2015 11:44:01 +0100 Subject: [PATCH] PPP, generalized callbacks calls from PPP core, removed all PPPoE and PPPoL2TP references Almost there, removed all PPPoE and PPPoL2TP references from PPP core, using the generic callbacks interface everywhere. --- src/include/netif/ppp/ppp.h | 14 +---- src/include/netif/ppp/ppp_impl.h | 2 +- src/netif/ppp/ppp.c | 95 +++++--------------------------- src/netif/ppp/pppoe.c | 3 +- src/netif/ppp/pppol2tp.c | 3 +- 5 files changed, 17 insertions(+), 100 deletions(-) diff --git a/src/include/netif/ppp/ppp.h b/src/include/netif/ppp/ppp.h index f31544e1..81877d8f 100644 --- a/src/include/netif/ppp/ppp.h +++ b/src/include/netif/ppp/ppp.h @@ -182,13 +182,6 @@ typedef unsigned char u_char; /* Link status callback function prototype */ typedef void (*ppp_link_status_cb_fn)(ppp_pcb *pcb, int err_code, void *ctx); -#if PPPOE_SUPPORT -#include "netif/ppp/pppoe.h" -#endif /* PPPOE_SUPPORT */ -#if PPPOL2TP_SUPPORT -#include "netif/ppp/pppol2tp.h" -#endif /* PPPOL2TP_SUPPORT */ - /* * PPP configuration. */ @@ -365,12 +358,7 @@ struct ppp_pcb_s { link_command_cb_fn link_command_cb; link_write_cb_fn link_write_cb; link_netif_output_cb_fn link_netif_output_cb; -#if PPPOE_SUPPORT - struct pppoe_softc *pppoe_sc; -#endif /* PPPOE_SUPPORT */ -#if PPPOL2TP_SUPPORT - pppol2tp_pcb *l2tp_pcb; -#endif /* PPPOL2TP_SUPPORT */ + void *link_ctx_cb; void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */ #if PPP_NOTIFY_PHASE void (*notify_phase_cb)(ppp_pcb *pcb, u8_t phase, void *ctx); /* Notify phase callback */ diff --git a/src/include/netif/ppp/ppp_impl.h b/src/include/netif/ppp/ppp_impl.h index a1858e2e..49624ea6 100644 --- a/src/include/netif/ppp/ppp_impl.h +++ b/src/include/netif/ppp/ppp_impl.h @@ -384,7 +384,7 @@ ppp_pcb *ppp_new(struct netif *pppif, ppp_link_status_cb_fn link_status_cb, void 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 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); /* 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 ce29605a..ad720f77 100644 --- a/src/netif/ppp/ppp.c +++ b/src/netif/ppp/ppp.c @@ -121,13 +121,6 @@ #include "netif/ppp/ipv6cp.h" #endif /* PPP_IPV6_SUPPORT */ -#if PPPOE_SUPPORT -#include "netif/ppp/pppoe.h" -#endif /* PPPOE_SUPPORT */ -#if PPPOL2TP_SUPPORT -#include "netif/ppp/pppol2tp.h" -#endif /* PPPOL2TP_SUPPORT */ - /* Global variables */ #if PPP_DEBUG @@ -206,14 +199,6 @@ static void pppos_input_callback(void *arg); static void ppp_free_current_input_packet(ppp_pcb_rx *pcrx); #endif /* PPPOS_SUPPORT */ -#if PPPOE_SUPPORT -static void ppp_over_ethernet_open(ppp_pcb *pcb); -#endif /* PPPOE_SUPPORT */ - -#if PPPOL2TP_SUPPORT -static void ppp_over_l2tp_open(ppp_pcb *pcb); -#endif /* PPPOL2TP_SUPPORT */ - /***********************************/ /*** PUBLIC FUNCTION DEFINITIONS ***/ /***********************************/ @@ -383,19 +368,9 @@ int ppp_free(ppp_pcb *pcb) { netif_remove(pcb->netif); -#if PPPOE_SUPPORT - if (pcb->pppoe_sc) { - pcb->link_command_cb(pcb->pppoe_sc, PPP_LINK_COMMAND_FREE); - pcb->pppoe_sc = NULL; + if (pcb->link_ctx_cb) { + pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_FREE); } -#endif /* PPPOE_SUPPORT */ - -#if PPPOL2TP_SUPPORT - if (pcb->l2tp_pcb) { - pcb->link_command_cb(pcb->l2tp_pcb, PPP_LINK_COMMAND_FREE); - pcb->l2tp_pcb = NULL; - } -#endif /* PPPOL2TP_SUPPORT */ #if PPPOS_SUPPORT /* input pbuf left ? */ @@ -528,10 +503,11 @@ 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 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; + pcb->link_ctx_cb = ctx; } static void ppp_do_open(void *arg) { @@ -539,19 +515,10 @@ 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); -#if PPPOE_SUPPORT - if (pcb->pppoe_sc) { - ppp_over_ethernet_open(pcb); + if (pcb->link_ctx_cb) { + pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_CONNECT); return; } -#endif /* PPPOE_SUPPORT */ - -#if PPPOL2TP_SUPPORT - if (pcb->l2tp_pcb) { - ppp_over_l2tp_open(pcb); - return; - } -#endif /* PPPOL2TP_SUPPORT */ #if PPPOS_SUPPORT ppp_over_serial_open(pcb); @@ -978,17 +945,9 @@ static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u_short prot return ERR_RTE; } -#if PPPOE_SUPPORT - if(pcb->pppoe_sc) { - return pcb->link_netif_output_cb(pcb->pppoe_sc, pb, protocol); + if(pcb->link_ctx_cb) { + return pcb->link_netif_output_cb(pcb->link_ctx_cb, pb, protocol); } -#endif /* PPPOE_SUPPORT */ - -#if PPPOL2TP_SUPPORT - if(pcb->l2tp_pcb) { - return pcb->link_netif_output_cb(pcb->l2tp_pcb, pb, protocol); - } -#endif /* PPPOL2TP_SUPPORT */ #if PPPOS_SUPPORT return ppp_netif_output_over_serial(pcb, pb, protocol); @@ -1178,17 +1137,9 @@ int ppp_write(ppp_pcb *pcb, struct pbuf *p) { ppp_dump_packet("sent", (unsigned char *)p->payload+2, p->len-2); #endif /* PRINTPKT_SUPPORT */ -#if PPPOE_SUPPORT - if(pcb->pppoe_sc) { - return pcb->link_write_cb(pcb->pppoe_sc, p); + if(pcb->link_ctx_cb) { + return pcb->link_write_cb(pcb->link_ctx_cb, p); } -#endif /* PPPOE_SUPPORT */ - -#if PPPOL2TP_SUPPORT - if(pcb->l2tp_pcb) { - return pcb->link_write_cb(pcb->l2tp_pcb, p); - } -#endif /* PPPOL2TP_SUPPORT */ #if PPPOS_SUPPORT return ppp_write_over_serial(pcb, p); @@ -1605,18 +1556,6 @@ struct pbuf * ppp_singlebuf(struct pbuf *p) { return q; } -#if PPPOE_SUPPORT -static void ppp_over_ethernet_open(ppp_pcb *pcb) { - pcb->link_command_cb(pcb->pppoe_sc, PPP_LINK_COMMAND_CONNECT); -} -#endif /* PPPOE_SUPPORT */ - -#if PPPOL2TP_SUPPORT -static void ppp_over_l2tp_open(ppp_pcb *pcb) { - pcb->link_command_cb(pcb->l2tp_pcb, PPP_LINK_COMMAND_CONNECT); -} -#endif /* PPPOL2TP_SUPPORT */ - void ppp_link_down(ppp_pcb *pcb) { LWIP_UNUSED_ARG(pcb); /* necessary if PPPDEBUG is defined to an empty function */ PPPDEBUG(LOG_DEBUG, ("ppp_link_down: unit %d\n", pcb->num)); @@ -1625,17 +1564,9 @@ void ppp_link_down(ppp_pcb *pcb) { void ppp_link_terminated(ppp_pcb *pcb) { PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated: unit %d\n", pcb->num)); -#if PPPOE_SUPPORT - if (pcb->pppoe_sc) { - pcb->link_command_cb(pcb->pppoe_sc, PPP_LINK_COMMAND_DISCONNECT); - } else -#endif /* PPPOE_SUPPORT */ -#if PPPOL2TP_SUPPORT - if (pcb->l2tp_pcb) { - pcb->link_command_cb(pcb->l2tp_pcb, PPP_LINK_COMMAND_DISCONNECT); - } else -#endif /* PPPOL2TP_SUPPORT */ - { + if (pcb->link_ctx_cb) { + pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_DISCONNECT); + } else { #if PPPOS_SUPPORT /* We cannot call ppp_free_current_input_packet() here because * rx thread might still call pppos_input() diff --git a/src/netif/ppp/pppoe.c b/src/netif/ppp/pppoe.c index a23cdf99..8cc51129 100644 --- a/src/netif/ppp/pppoe.c +++ b/src/netif/ppp/pppoe.c @@ -184,8 +184,7 @@ ppp_pcb *ppp_over_ethernet_create(struct netif *pppif, sc->next = pppoe_softc_list; pppoe_softc_list = sc; - ppp->pppoe_sc = sc; - ppp_link_set_callbacks(ppp, pppoe_link_command_callback, pppoe_link_write_callback, pppoe_link_netif_output_callback); + ppp_link_set_callbacks(ppp, pppoe_link_command_callback, pppoe_link_write_callback, pppoe_link_netif_output_callback, sc); return ppp; } diff --git a/src/netif/ppp/pppol2tp.c b/src/netif/ppp/pppol2tp.c index 98732cfd..d3dc182f 100644 --- a/src/netif/ppp/pppol2tp.c +++ b/src/netif/ppp/pppol2tp.c @@ -135,8 +135,7 @@ ppp_pcb *ppp_over_l2tp_create(struct netif *pppif, struct netif *netif, ip_addr_ l2tp->secret_len = secret_len; #endif /* PPPOL2TP_AUTH_SUPPORT */ - ppp->l2tp_pcb = l2tp; - ppp_link_set_callbacks(ppp, pppol2tp_link_command_callback, pppol2tp_link_write_callback, pppol2tp_link_netif_output_callback); + ppp_link_set_callbacks(ppp, pppol2tp_link_command_callback, pppol2tp_link_write_callback, pppol2tp_link_netif_output_callback, l2tp); return ppp; }