merged ppp_write and ppp_write_pbuf

This commit is contained in:
Sylvain Rochet 2012-06-22 14:17:35 +02:00
parent bda73b1bc9
commit 9b7860d6ec
6 changed files with 31 additions and 29 deletions

View File

@ -244,7 +244,7 @@ static void chap_timeout(void *arg) {
if(NULL == p) if(NULL == p)
return; return;
MEMCPY(p->payload, pcb->chap_server.challenge, pcb->chap_server.challenge_pktlen); MEMCPY(p->payload, pcb->chap_server.challenge, pcb->chap_server.challenge_pktlen);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
++pcb->chap_server.challenge_xmits; ++pcb->chap_server.challenge_xmits;
pcb->chap_server.flags |= TIMEOUT_PENDING; pcb->chap_server.flags |= TIMEOUT_PENDING;
TIMEOUT(chap_timeout, arg, pcb->settings.chap_timeout_time); TIMEOUT(chap_timeout, arg, pcb->settings.chap_timeout_time);
@ -347,7 +347,7 @@ static void chap_handle_response(ppp_pcb *pcb, int id,
outp[3] = len; outp[3] = len;
if (mlen > 0) if (mlen > 0)
memcpy(outp + CHAP_HDRLEN, pcb->chap_server.message, mlen); memcpy(outp + CHAP_HDRLEN, pcb->chap_server.message, mlen);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
if (pcb->chap_server.flags & CHALLENGE_VALID) { if (pcb->chap_server.flags & CHALLENGE_VALID) {
pcb->chap_server.flags &= ~CHALLENGE_VALID; pcb->chap_server.flags &= ~CHALLENGE_VALID;
@ -473,7 +473,7 @@ static void chap_respond(ppp_pcb *pcb, int id,
outp[3] = len; outp[3] = len;
pbuf_realloc(p, PPP_HDRLEN + len); pbuf_realloc(p, PPP_HDRLEN + len);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
static void chap_handle_status(ppp_pcb *pcb, int code, int id, static void chap_handle_status(ppp_pcb *pcb, int code, int id,

View File

@ -279,7 +279,7 @@ eap_state *esp;
PUTCHAR(pcb->eap.es_server.ea_id, outp); PUTCHAR(pcb->eap.es_server.ea_id, outp);
PUTSHORT(EAP_HEADERLEN, outp); PUTSHORT(EAP_HEADERLEN, outp);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
pcb->eap.es_server.ea_state = eapBadAuth; pcb->eap.es_server.ea_state = eapBadAuth;
auth_peer_fail(pcb, PPP_EAP); auth_peer_fail(pcb, PPP_EAP);
@ -310,7 +310,7 @@ eap_state *esp;
PUTCHAR(pcb->eap.es_server.ea_id, outp); PUTCHAR(pcb->eap.es_server.ea_id, outp);
PUTSHORT(EAP_HEADERLEN, outp); PUTSHORT(EAP_HEADERLEN, outp);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
auth_peer_success(pcb, PPP_EAP, 0, auth_peer_success(pcb, PPP_EAP, 0,
pcb->eap.es_server.ea_peer, pcb->eap.es_server.ea_peerlen); pcb->eap.es_server.ea_peer, pcb->eap.es_server.ea_peerlen);
@ -881,7 +881,7 @@ eap_state *esp;
PUTSHORT(outlen, lenloc); PUTSHORT(outlen, lenloc);
pbuf_realloc(p, outlen + PPP_HDRLEN); pbuf_realloc(p, outlen + PPP_HDRLEN);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
pcb->eap.es_server.ea_requests++; pcb->eap.es_server.ea_requests++;
@ -1076,7 +1076,7 @@ static void eap_send_response(ppp_pcb *pcb, u_char id, u_char typenum, u_char *s
MEMCPY(outp, str, lenstr); MEMCPY(outp, str, lenstr);
} }
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
/* /*
@ -1109,7 +1109,7 @@ static void eap_chap_response(ppp_pcb *pcb, u_char id, u_char *hash, char *name,
MEMCPY(outp, name, namelen); MEMCPY(outp, name, namelen);
} }
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
#ifdef USE_SRP #ifdef USE_SRP
@ -1148,7 +1148,7 @@ int lenstr;
MEMCPY(outp, str, lenstr); MEMCPY(outp, str, lenstr);
} }
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
/* /*
@ -1185,7 +1185,7 @@ u_char *str;
PUTLONG(flags, outp); PUTLONG(flags, outp);
MEMCPY(outp, str, SHA_DIGESTSIZE); MEMCPY(outp, str, SHA_DIGESTSIZE);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
#endif /* USE_SRP */ #endif /* USE_SRP */
@ -1210,7 +1210,7 @@ static void eap_send_nak(ppp_pcb *pcb, u_char id, u_char type) {
PUTCHAR(EAPT_NAK, outp); PUTCHAR(EAPT_NAK, outp);
PUTCHAR(type, outp); PUTCHAR(type, outp);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
#ifdef USE_SRP #ifdef USE_SRP

View File

@ -732,7 +732,7 @@ static void fsm_sconfreq(fsm *f, int retransmit) {
PUTSHORT(cilen + HEADERLEN, outp); PUTSHORT(cilen + HEADERLEN, outp);
pbuf_realloc(p, cilen + HEADERLEN + PPP_HDRLEN); pbuf_realloc(p, cilen + HEADERLEN + PPP_HDRLEN);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
/* start the retransmit timer */ /* start the retransmit timer */
--f->retransmits; --f->retransmits;
@ -767,7 +767,7 @@ void fsm_sdata(fsm *f, u_char code, u_char id, u_char *data, int datalen) {
PUTCHAR(code, outp); PUTCHAR(code, outp);
PUTCHAR(id, outp); PUTCHAR(id, outp);
PUTSHORT(outlen, outp); PUTSHORT(outlen, outp);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
#endif /* PPP_SUPPORT */ #endif /* PPP_SUPPORT */

View File

@ -212,7 +212,7 @@ static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u_short prot
#if PPPOE_SUPPORT #if PPPOE_SUPPORT
static err_t ppp_netif_output_over_ethernet(ppp_pcb *pcb, struct pbuf *p, u_short protocol); static err_t ppp_netif_output_over_ethernet(ppp_pcb *pcb, struct pbuf *p, u_short protocol);
/* function called by ppp_write() */ /* function called by ppp_write() */
static int ppp_write_over_ethernet(ppp_pcb *pcb, const u_char *s, int n); static int ppp_write_over_ethernet(ppp_pcb *pcb, struct pbuf *p);
#endif /* PPPOE_SUPPORT */ #endif /* PPPOE_SUPPORT */
static void ppp_destroy(ppp_pcb *pcb); static void ppp_destroy(ppp_pcb *pcb);
@ -1173,20 +1173,15 @@ ppp_ioctl(ppp_pcb *pcb, int cmd, void *arg)
return PPPERR_PARAM; return PPPERR_PARAM;
} }
/* FIXME: improve that */
int ppp_write_pbuf(ppp_pcb *pcb, struct pbuf *p) {
int ret = ppp_write(pcb, p->payload, p->len);
pbuf_free(p);
return ret;
}
/* /*
* Write n characters to a ppp link. * Write a pbuf to a ppp link.
* RETURN: >= 0 Number of characters written * RETURN: >= 0 Number of characters written
* -1 Failed to write to device * -1 Failed to write to device
*/ */
int ppp_write(ppp_pcb *pcb, const u_char *s, int n) { int ppp_write(ppp_pcb *pcb, struct pbuf *p) {
#if PPPOS_SUPPORT #if PPPOS_SUPPORT
u_char *s = p->payload;
int n = p->len;
u_char c; u_char c;
u_int fcs_out; u_int fcs_out;
struct pbuf *head, *tail; struct pbuf *head, *tail;
@ -1194,7 +1189,7 @@ int ppp_write(ppp_pcb *pcb, const u_char *s, int n) {
#if PPPOE_SUPPORT #if PPPOE_SUPPORT
if(pcb->ethif) { if(pcb->ethif) {
return ppp_write_over_ethernet(pcb, s, n); return ppp_write_over_ethernet(pcb, p);
} }
#endif /* PPPOE_SUPPORT */ #endif /* PPPOE_SUPPORT */
@ -1204,6 +1199,7 @@ int ppp_write(ppp_pcb *pcb, const u_char *s, int n) {
LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.memerr);
LINK_STATS_INC(link.proterr); LINK_STATS_INC(link.proterr);
snmp_inc_ifoutdiscards(&pcb->netif); snmp_inc_ifoutdiscards(&pcb->netif);
pbuf_free(p);
return PPPERR_ALLOC; return PPPERR_ALLOC;
} }
@ -1245,6 +1241,7 @@ int ppp_write(ppp_pcb *pcb, const u_char *s, int n) {
LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.memerr);
LINK_STATS_INC(link.proterr); LINK_STATS_INC(link.proterr);
snmp_inc_ifoutdiscards(&pcb->netif); snmp_inc_ifoutdiscards(&pcb->netif);
pbuf_free(p);
return PPPERR_ALLOC; return PPPERR_ALLOC;
} }
@ -1253,11 +1250,14 @@ int ppp_write(ppp_pcb *pcb, const u_char *s, int n) {
pppos_put(pcb, head); pppos_put(pcb, head);
#endif /* PPPOS_SUPPORT */ #endif /* PPPOS_SUPPORT */
pbuf_free(p);
return PPPERR_NONE; return PPPERR_NONE;
} }
#if PPPOE_SUPPORT #if PPPOE_SUPPORT
static int ppp_write_over_ethernet(ppp_pcb *pcb, const u_char *s, int n) { static int ppp_write_over_ethernet(ppp_pcb *pcb, struct pbuf *p) {
u_char *s = p->payload;
int n = p->len;
struct pbuf *pb; struct pbuf *pb;
/* skip address & flags */ /* skip address & flags */
@ -1270,6 +1270,7 @@ static int ppp_write_over_ethernet(ppp_pcb *pcb, const u_char *s, int n) {
LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.memerr);
LINK_STATS_INC(link.proterr); LINK_STATS_INC(link.proterr);
snmp_inc_ifoutdiscards(&pcb->netif); snmp_inc_ifoutdiscards(&pcb->netif);
pbuf_free(p);
return PPPERR_ALLOC; return PPPERR_ALLOC;
} }
@ -1282,6 +1283,7 @@ static int ppp_write_over_ethernet(ppp_pcb *pcb, const u_char *s, int n) {
if(pppoe_xmit(pcb->pppoe_sc, pb) != ERR_OK) { if(pppoe_xmit(pcb->pppoe_sc, pb) != ERR_OK) {
LINK_STATS_INC(link.err); LINK_STATS_INC(link.err);
snmp_inc_ifoutdiscards(&pcb->netif); snmp_inc_ifoutdiscards(&pcb->netif);
pbuf_free(p);
return PPPERR_DEVICE; return PPPERR_DEVICE;
} }
@ -1292,6 +1294,7 @@ static int ppp_write_over_ethernet(ppp_pcb *pcb, const u_char *s, int n) {
snmp_add_ifoutoctets(&pcb->netif, (u16_t)n); snmp_add_ifoutoctets(&pcb->netif, (u16_t)n);
snmp_inc_ifoutucastpkts(&pcb->netif); snmp_inc_ifoutucastpkts(&pcb->netif);
LINK_STATS_INC(link.xmit); LINK_STATS_INC(link.xmit);
pbuf_free(p);
return PPPERR_NONE; return PPPERR_NONE;
} }
#endif /* PPPOE_SUPPORT */ #endif /* PPPOE_SUPPORT */

View File

@ -383,9 +383,8 @@ struct pppd_stats {
/* function called by pppoe.c */ /* function called by pppoe.c */
void ppp_input(ppp_pcb *pcb, struct pbuf *pb); void ppp_input(ppp_pcb *pcb, struct pbuf *pb);
int ppp_write_pbuf(ppp_pcb *pcb, struct pbuf *p);
/* function called by all PPP subsystems to send packets */ /* function called by all PPP subsystems to send packets */
int ppp_write(ppp_pcb *pcb, const u_char *s, int n); int ppp_write(ppp_pcb *pcb, struct pbuf *p);
/* functions called by auth.c link_terminated() */ /* functions called by auth.c link_terminated() */
void ppp_link_down(ppp_pcb *pcb); void ppp_link_down(ppp_pcb *pcb);

View File

@ -546,7 +546,7 @@ static void upap_sauthreq(ppp_pcb *pcb) {
PUTCHAR(pcb->upap.us_passwdlen, outp); PUTCHAR(pcb->upap.us_passwdlen, outp);
MEMCPY(outp, pcb->upap.us_passwd, pcb->upap.us_passwdlen); MEMCPY(outp, pcb->upap.us_passwd, pcb->upap.us_passwdlen);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
TIMEOUT(upap_timeout, pcb, pcb->upap.us_timeouttime); TIMEOUT(upap_timeout, pcb, pcb->upap.us_timeouttime);
++pcb->upap.us_transmits; ++pcb->upap.us_transmits;
@ -576,7 +576,7 @@ static void upap_sresp(ppp_pcb *pcb, u_char code, u_char id, char *msg, int msgl
PUTCHAR(msglen, outp); PUTCHAR(msglen, outp);
MEMCPY(outp, msg, msglen); MEMCPY(outp, msg, msglen);
ppp_write_pbuf(pcb, p); ppp_write(pcb, p);
} }
#endif /* UNUSED */ #endif /* UNUSED */