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.
This commit is contained in:
Sylvain Rochet 2015-02-15 11:44:01 +01:00
parent 19282d6d6c
commit 09b4485870
5 changed files with 17 additions and 100 deletions

View File

@ -182,13 +182,6 @@ typedef unsigned char u_char;
/* Link status callback function prototype */ /* Link status callback function prototype */
typedef void (*ppp_link_status_cb_fn)(ppp_pcb *pcb, int err_code, void *ctx); 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. * PPP configuration.
*/ */
@ -365,12 +358,7 @@ struct ppp_pcb_s {
link_command_cb_fn link_command_cb; link_command_cb_fn link_command_cb;
link_write_cb_fn link_write_cb; link_write_cb_fn link_write_cb;
link_netif_output_cb_fn link_netif_output_cb; link_netif_output_cb_fn link_netif_output_cb;
#if PPPOE_SUPPORT void *link_ctx_cb;
struct pppoe_softc *pppoe_sc;
#endif /* PPPOE_SUPPORT */
#if PPPOL2TP_SUPPORT
pppol2tp_pcb *l2tp_pcb;
#endif /* PPPOL2TP_SUPPORT */
void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */ void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */
#if PPP_NOTIFY_PHASE #if PPP_NOTIFY_PHASE
void (*notify_phase_cb)(ppp_pcb *pcb, u8_t phase, void *ctx); /* Notify phase callback */ void (*notify_phase_cb)(ppp_pcb *pcb, u8_t phase, void *ctx); /* Notify phase callback */

View File

@ -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); void ppp_clear(ppp_pcb *pcb);
/* Set link callback function */ /* 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 */ /* Initiate LCP open request */
void ppp_start(ppp_pcb *pcb); void ppp_start(ppp_pcb *pcb);

View File

@ -121,13 +121,6 @@
#include "netif/ppp/ipv6cp.h" #include "netif/ppp/ipv6cp.h"
#endif /* PPP_IPV6_SUPPORT */ #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 */ /* Global variables */
#if PPP_DEBUG #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); static void ppp_free_current_input_packet(ppp_pcb_rx *pcrx);
#endif /* PPPOS_SUPPORT */ #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 ***/ /*** PUBLIC FUNCTION DEFINITIONS ***/
/***********************************/ /***********************************/
@ -383,19 +368,9 @@ int ppp_free(ppp_pcb *pcb) {
netif_remove(pcb->netif); netif_remove(pcb->netif);
#if PPPOE_SUPPORT if (pcb->link_ctx_cb) {
if (pcb->pppoe_sc) { pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_FREE);
pcb->link_command_cb(pcb->pppoe_sc, PPP_LINK_COMMAND_FREE);
pcb->pppoe_sc = NULL;
} }
#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 #if PPPOS_SUPPORT
/* input pbuf left ? */ /* input pbuf left ? */
@ -528,10 +503,11 @@ void ppp_clear(ppp_pcb *pcb) {
new_phase(pcb, PPP_PHASE_INITIALIZE); 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_command_cb = command;
pcb->link_write_cb = write; pcb->link_write_cb = write;
pcb->link_netif_output_cb = netif_output; pcb->link_netif_output_cb = netif_output;
pcb->link_ctx_cb = ctx;
} }
static void ppp_do_open(void *arg) { 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); 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->link_ctx_cb) {
if (pcb->pppoe_sc) { pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_CONNECT);
ppp_over_ethernet_open(pcb);
return; return;
} }
#endif /* PPPOE_SUPPORT */
#if PPPOL2TP_SUPPORT
if (pcb->l2tp_pcb) {
ppp_over_l2tp_open(pcb);
return;
}
#endif /* PPPOL2TP_SUPPORT */
#if PPPOS_SUPPORT #if PPPOS_SUPPORT
ppp_over_serial_open(pcb); 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; return ERR_RTE;
} }
#if PPPOE_SUPPORT if(pcb->link_ctx_cb) {
if(pcb->pppoe_sc) { return pcb->link_netif_output_cb(pcb->link_ctx_cb, pb, protocol);
return pcb->link_netif_output_cb(pcb->pppoe_sc, 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 #if PPPOS_SUPPORT
return ppp_netif_output_over_serial(pcb, pb, protocol); 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); ppp_dump_packet("sent", (unsigned char *)p->payload+2, p->len-2);
#endif /* PRINTPKT_SUPPORT */ #endif /* PRINTPKT_SUPPORT */
#if PPPOE_SUPPORT if(pcb->link_ctx_cb) {
if(pcb->pppoe_sc) { return pcb->link_write_cb(pcb->link_ctx_cb, p);
return pcb->link_write_cb(pcb->pppoe_sc, 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 #if PPPOS_SUPPORT
return ppp_write_over_serial(pcb, p); return ppp_write_over_serial(pcb, p);
@ -1605,18 +1556,6 @@ struct pbuf * ppp_singlebuf(struct pbuf *p) {
return q; 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) { void ppp_link_down(ppp_pcb *pcb) {
LWIP_UNUSED_ARG(pcb); /* necessary if PPPDEBUG is defined to an empty function */ LWIP_UNUSED_ARG(pcb); /* necessary if PPPDEBUG is defined to an empty function */
PPPDEBUG(LOG_DEBUG, ("ppp_link_down: unit %d\n", pcb->num)); 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) { void ppp_link_terminated(ppp_pcb *pcb) {
PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated: unit %d\n", pcb->num)); PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated: unit %d\n", pcb->num));
#if PPPOE_SUPPORT if (pcb->link_ctx_cb) {
if (pcb->pppoe_sc) { pcb->link_command_cb(pcb->link_ctx_cb, PPP_LINK_COMMAND_DISCONNECT);
pcb->link_command_cb(pcb->pppoe_sc, PPP_LINK_COMMAND_DISCONNECT); } else {
} 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 PPPOS_SUPPORT #if PPPOS_SUPPORT
/* We cannot call ppp_free_current_input_packet() here because /* We cannot call ppp_free_current_input_packet() here because
* rx thread might still call pppos_input() * rx thread might still call pppos_input()

View File

@ -184,8 +184,7 @@ ppp_pcb *ppp_over_ethernet_create(struct netif *pppif,
sc->next = pppoe_softc_list; sc->next = pppoe_softc_list;
pppoe_softc_list = sc; 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, sc);
ppp_link_set_callbacks(ppp, pppoe_link_command_callback, pppoe_link_write_callback, pppoe_link_netif_output_callback);
return ppp; return ppp;
} }

View File

@ -135,8 +135,7 @@ ppp_pcb *ppp_over_l2tp_create(struct netif *pppif, struct netif *netif, ip_addr_
l2tp->secret_len = secret_len; l2tp->secret_len = secret_len;
#endif /* PPPOL2TP_AUTH_SUPPORT */ #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, l2tp);
ppp_link_set_callbacks(ppp, pppol2tp_link_command_callback, pppol2tp_link_write_callback, pppol2tp_link_netif_output_callback);
return ppp; return ppp;
} }