mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-04 21:44:38 +08:00
PPP, reorder initialisation of low level protocols to call ppp_link_set_callbacks() just after PPP control block allocation
This commit is contained in:
parent
5b07569eb9
commit
46204a9f86
@ -174,29 +174,26 @@ 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);
|
||||||
|
|
||||||
ppp = ppp_new(pppif, link_status_cb, ctx_cb);
|
|
||||||
if (ppp == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
sc = (struct pppoe_softc *)memp_malloc(MEMP_PPPOE_IF);
|
sc = (struct pppoe_softc *)memp_malloc(MEMP_PPPOE_IF);
|
||||||
if (sc == NULL) {
|
if (sc == NULL) {
|
||||||
ppp_free(ppp);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memset(sc, 0, sizeof(struct pppoe_softc));
|
|
||||||
|
|
||||||
|
ppp = ppp_new(pppif, link_status_cb, ctx_cb);
|
||||||
|
if (ppp == NULL) {
|
||||||
|
memp_free(MEMP_PPPOE_IF, sc);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ppp_link_set_callbacks(ppp, &pppoe_callbacks, sc);
|
||||||
|
|
||||||
|
memset(sc, 0, sizeof(struct pppoe_softc));
|
||||||
/* changed to real address later */
|
/* changed to real address later */
|
||||||
MEMCPY(&sc->sc_dest, ethbroadcast.addr, sizeof(sc->sc_dest));
|
MEMCPY(&sc->sc_dest, ethbroadcast.addr, sizeof(sc->sc_dest));
|
||||||
|
|
||||||
sc->pcb = ppp;
|
sc->pcb = ppp;
|
||||||
sc->sc_ethif = ethif;
|
sc->sc_ethif = ethif;
|
||||||
|
|
||||||
/* put the new interface at the head of the list */
|
/* put the new interface at the head of the list */
|
||||||
sc->next = pppoe_softc_list;
|
sc->next = pppoe_softc_list;
|
||||||
pppoe_softc_list = sc;
|
pppoe_softc_list = sc;
|
||||||
|
|
||||||
ppp_link_set_callbacks(ppp, &pppoe_callbacks, sc);
|
|
||||||
return ppp;
|
return ppp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,16 +124,17 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
|
|||||||
goto ipaddr_check_failed;
|
goto ipaddr_check_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
ppp = ppp_new(pppif, link_status_cb, ctx_cb);
|
|
||||||
if (ppp == NULL) {
|
|
||||||
goto ppp_new_failed;
|
|
||||||
}
|
|
||||||
|
|
||||||
l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB);
|
l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB);
|
||||||
if (l2tp == NULL) {
|
if (l2tp == NULL) {
|
||||||
goto memp_malloc_l2tp_failed;
|
goto memp_malloc_l2tp_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ppp = ppp_new(pppif, link_status_cb, ctx_cb);
|
||||||
|
if (ppp == NULL) {
|
||||||
|
goto ppp_new_failed;
|
||||||
|
}
|
||||||
|
ppp_link_set_callbacks(ppp, &pppol2tp_callbacks, l2tp);
|
||||||
|
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
if (IP_IS_V6_VAL(*ipaddr)) {
|
if (IP_IS_V6_VAL(*ipaddr)) {
|
||||||
udp = udp_new_ip6();
|
udp = udp_new_ip6();
|
||||||
@ -157,14 +158,13 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
|
|||||||
l2tp->secret_len = secret_len;
|
l2tp->secret_len = secret_len;
|
||||||
#endif /* PPPOL2TP_AUTH_SUPPORT */
|
#endif /* PPPOL2TP_AUTH_SUPPORT */
|
||||||
|
|
||||||
ppp_link_set_callbacks(ppp, &pppol2tp_callbacks, l2tp);
|
|
||||||
return ppp;
|
return ppp;
|
||||||
|
|
||||||
udp_new_failed:
|
udp_new_failed:
|
||||||
memp_free(MEMP_PPPOL2TP_PCB, l2tp);
|
|
||||||
memp_malloc_l2tp_failed:
|
|
||||||
ppp_free(ppp);
|
ppp_free(ppp);
|
||||||
ppp_new_failed:
|
ppp_new_failed:
|
||||||
|
memp_free(MEMP_PPPOL2TP_PCB, l2tp);
|
||||||
|
memp_malloc_l2tp_failed:
|
||||||
ipaddr_check_failed:
|
ipaddr_check_failed:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -173,20 +173,20 @@ 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;
|
||||||
|
|
||||||
ppp = ppp_new(pppif, link_status_cb, ctx_cb);
|
pppos = (pppos_pcb *)memp_malloc(MEMP_PPPOS_PCB);
|
||||||
if (ppp == NULL) {
|
if (pppos == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pppos = (pppos_pcb *)memp_malloc(MEMP_PPPOS_PCB);
|
ppp = ppp_new(pppif, link_status_cb, ctx_cb);
|
||||||
if (pppos == NULL) {
|
if (ppp == NULL) {
|
||||||
ppp_free(ppp);
|
memp_free(MEMP_PPPOS_PCB, pppos);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
ppp_link_set_callbacks(ppp, &pppos_callbacks, pppos);
|
||||||
|
|
||||||
pppos->ppp = ppp;
|
pppos->ppp = ppp;
|
||||||
pppos->output_cb = output_cb;
|
pppos->output_cb = output_cb;
|
||||||
ppp_link_set_callbacks(ppp, &pppos_callbacks, pppos);
|
|
||||||
return ppp;
|
return ppp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user