[lwIP] Add more RT-Thread options into lwIP

This commit is contained in:
bernard 2014-01-04 07:55:25 +08:00
parent cdf02d3aa0
commit 3142811644
2 changed files with 36 additions and 27 deletions

View File

@ -306,8 +306,17 @@
* we're limited by the command line length so you need to modify the settings * we're limited by the command line length so you need to modify the settings
* in this file. * in this file.
*/ */
#ifdef RT_LWIP_PPPOE
#define PPPOE_SUPPORT 1
#else
#define PPPOE_SUPPORT 0 #define PPPOE_SUPPORT 0
#endif
#ifdef RT_LWIP_PPPOS
#define PPPOS_SUPPORT 1 #define PPPOS_SUPPORT 1
#else
#define PPPOS_SUPPORT 0
#endif
#define PAP_SUPPORT 1 /* Set > 0 for PAP. */ #define PAP_SUPPORT 1 /* Set > 0 for PAP. */
#define CHAP_SUPPORT 1 /* Set > 0 for CHAP. */ #define CHAP_SUPPORT 1 /* Set > 0 for CHAP. */

View File

@ -262,13 +262,13 @@ pppoe_find_softc_by_hunique(u8_t *token, size_t len, struct netif *rcvif)
/* should be safe to access *sc now */ /* should be safe to access *sc now */
if (sc->sc_state < PPPOE_STATE_PADI_SENT || sc->sc_state >= PPPOE_STATE_SESSION) { if (sc->sc_state < PPPOE_STATE_PADI_SENT || sc->sc_state >= PPPOE_STATE_SESSION) {
printf("%c%c%"U16_F": host unique tag found, but it belongs to a connection in state %d\n", PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": host unique tag found, but it belongs to a connection in state %d\n",
sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, sc->sc_state); sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, sc->sc_state));
return NULL; return NULL;
} }
if (sc->sc_ethif != rcvif) { if (sc->sc_ethif != rcvif) {
printf("%c%c%"U16_F": wrong interface, not accepting host unique\n", PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": wrong interface, not accepting host unique\n",
sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num); sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num));
return NULL; return NULL;
} }
return sc; return sc;
@ -319,13 +319,13 @@ pppoe_dispatch_disc_pkt(struct netif *netif, struct pbuf *pb)
#endif #endif
session = 0; session = 0;
if (pb->len - off < PPPOE_HEADERLEN) { if (pb->len - off < PPPOE_HEADERLEN) {
printf("pppoe: packet too short: %d\n", pb->len); PPPDEBUG(LOG_DEBUG, ("pppoe: packet too short: %d\n", pb->len));
goto done; goto done;
} }
ph = (struct pppoehdr *) (ethhdr + 1); ph = (struct pppoehdr *) (ethhdr + 1);
if (ph->vertype != PPPOE_VERTYPE) { if (ph->vertype != PPPOE_VERTYPE) {
printf("pppoe: unknown version/type packet: 0x%x\n", ph->vertype); PPPDEBUG(LOG_DEBUG, ("pppoe: unknown version/type packet: 0x%x\n", ph->vertype));
goto done; goto done;
} }
session = ntohs(ph->session); session = ntohs(ph->session);
@ -333,8 +333,8 @@ pppoe_dispatch_disc_pkt(struct netif *netif, struct pbuf *pb)
off += sizeof(*ph); off += sizeof(*ph);
if (plen + off > pb->len) { if (plen + off > pb->len) {
printf("pppoe: packet content does not fit: data available = %d, packet size = %u\n", PPPDEBUG(LOG_DEBUG, ("pppoe: packet content does not fit: data available = %d, packet size = %u\n",
pb->len - off, plen); pb->len - off, plen));
goto done; goto done;
} }
if(pb->tot_len == pb->len) { if(pb->tot_len == pb->len) {
@ -348,7 +348,7 @@ pppoe_dispatch_disc_pkt(struct netif *netif, struct pbuf *pb)
tag = ntohs(pt.tag); tag = ntohs(pt.tag);
len = ntohs(pt.len); len = ntohs(pt.len);
if (off + sizeof(pt) + len > pb->len) { if (off + sizeof(pt) + len > pb->len) {
printf("pppoe: tag 0x%x len 0x%x is too long\n", tag, len); PPPDEBUG(LOG_DEBUG, ("pppoe: tag 0x%x len 0x%x is too long\n", tag, len));
goto done; goto done;
} }
switch (tag) { switch (tag) {
@ -395,9 +395,9 @@ pppoe_dispatch_disc_pkt(struct netif *netif, struct pbuf *pb)
u16_t error_len = LWIP_MIN(len, sizeof(pppoe_error_tmp)-1); u16_t error_len = LWIP_MIN(len, sizeof(pppoe_error_tmp)-1);
strncpy(pppoe_error_tmp, (char*)pb->payload + off + sizeof(pt), error_len); strncpy(pppoe_error_tmp, (char*)pb->payload + off + sizeof(pt), error_len);
pppoe_error_tmp[error_len-1] = '\0'; pppoe_error_tmp[error_len-1] = '\0';
printf("%s: %s: %s\n", devname, err_msg, pppoe_error_tmp); PPPDEBUG(LOG_DEBUG, ("%s: %s: %s\n", devname, err_msg, pppoe_error_tmp));
} else { } else {
printf("%s: %s\n", devname, err_msg); PPPDEBUG(LOG_DEBUG, ("%s: %s\n", devname, err_msg));
} }
if (errortag) { if (errortag) {
goto done; goto done;
@ -455,19 +455,19 @@ breakbreak:;
*/ */
if (ac_cookie == NULL) { if (ac_cookie == NULL) {
/* be quiet if there is not a single pppoe instance */ /* be quiet if there is not a single pppoe instance */
printf("pppoe: received PADR but not includes ac_cookie\n"); PPPDEBUG(LOG_DEBUG, ("pppoe: received PADR but not includes ac_cookie\n"));
goto done; goto done;
} }
sc = pppoe_find_softc_by_hunique(ac_cookie, ac_cookie_len, netif); sc = pppoe_find_softc_by_hunique(ac_cookie, ac_cookie_len, netif);
if (sc == NULL) { if (sc == NULL) {
/* be quiet if there is not a single pppoe instance */ /* be quiet if there is not a single pppoe instance */
if (!LIST_EMPTY(&pppoe_softc_list)) { if (!LIST_EMPTY(&pppoe_softc_list)) {
printf("pppoe: received PADR but could not find request for it\n"); PPPDEBUG(LOG_DEBUG, ("pppoe: received PADR but could not find request for it\n"));
} }
goto done; goto done;
} }
if (sc->sc_state != PPPOE_STATE_PADO_SENT) { if (sc->sc_state != PPPOE_STATE_PADO_SENT) {
printf("%c%c%"U16_F": received unexpected PADR\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num); PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": received unexpected PADR\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num));
goto done; goto done;
} }
if (hunique) { if (hunique) {
@ -493,12 +493,12 @@ breakbreak:;
if (sc == NULL) { if (sc == NULL) {
/* be quiet if there is not a single pppoe instance */ /* be quiet if there is not a single pppoe instance */
if (pppoe_softc_list != NULL) { if (pppoe_softc_list != NULL) {
printf("pppoe: received PADO but could not find request for it\n"); PPPDEBUG(LOG_DEBUG, ("pppoe: received PADO but could not find request for it\n"));
} }
goto done; goto done;
} }
if (sc->sc_state != PPPOE_STATE_PADI_SENT) { if (sc->sc_state != PPPOE_STATE_PADI_SENT) {
printf("%c%c%"U16_F": received unexpected PADO\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num); PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": received unexpected PADO\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num));
goto done; goto done;
} }
if (ac_cookie) { if (ac_cookie) {
@ -532,11 +532,11 @@ breakbreak:;
break; break;
default: default:
if(sc) { if(sc) {
printf("%c%c%"U16_F": unknown code (0x%"X16_F") session = 0x%"X16_F"\n", PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": unknown code (0x%"X16_F") session = 0x%"X16_F"\n",
sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num,
(u16_t)ph->code, session); (u16_t)ph->code, session));
} else { } else {
printf("pppoe: unknown code (0x%"X16_F") session = 0x%"X16_F"\n", (u16_t)ph->code, session); PPPDEBUG(LOG_DEBUG, ("pppoe: unknown code (0x%"X16_F") session = 0x%"X16_F"\n", (u16_t)ph->code, session));
} }
break; break;
} }
@ -580,18 +580,18 @@ pppoe_data_input(struct netif *netif, struct pbuf *pb)
pb = pppSingleBuf (pb); pb = pppSingleBuf (pb);
if (pb->len <= PPPOE_HEADERLEN) { if (pb->len <= PPPOE_HEADERLEN) {
printf("pppoe (data): dropping too short packet: %d bytes\n", pb->len); PPPDEBUG(LOG_DEBUG, ("pppoe (data): dropping too short packet: %d bytes\n", pb->len));
goto drop; goto drop;
} }
if (pb->len < sizeof(*ph)) { if (pb->len < sizeof(*ph)) {
printf("pppoe_data_input: could not get PPPoE header\n"); PPPDEBUG(LOG_DEBUG, ("pppoe_data_input: could not get PPPoE header\n"));
goto drop; goto drop;
} }
ph = (struct pppoehdr *)pb->payload; ph = (struct pppoehdr *)pb->payload;
if (ph->vertype != PPPOE_VERTYPE) { if (ph->vertype != PPPOE_VERTYPE) {
printf("pppoe (data): unknown version/type packet: 0x%x\n", ph->vertype); PPPDEBUG(LOG_DEBUG, ("pppoe (data): unknown version/type packet: 0x%x\n", ph->vertype));
goto drop; goto drop;
} }
if (ph->code != 0) { if (ph->code != 0) {
@ -602,8 +602,8 @@ pppoe_data_input(struct netif *netif, struct pbuf *pb)
sc = pppoe_find_softc_by_session(session, netif); sc = pppoe_find_softc_by_session(session, netif);
if (sc == NULL) { if (sc == NULL) {
#ifdef PPPOE_TERM_UNKNOWN_SESSIONS #ifdef PPPOE_TERM_UNKNOWN_SESSIONS
printf("pppoe: input for unknown session 0x%x, sending PADT\n", session); PPPDEBUG(LOG_DEBUG, ("pppoe: input for unknown session 0x%x, sending PADT\n", session);
pppoe_send_padt(netif, session, shost); pppoe_send_padt(netif, session, shost));
#endif #endif
goto drop; goto drop;
} }
@ -874,7 +874,7 @@ pppoe_do_disconnect(struct pppoe_softc *sc)
static void static void
pppoe_abort_connect(struct pppoe_softc *sc) pppoe_abort_connect(struct pppoe_softc *sc)
{ {
printf("%c%c%"U16_F": could not establish connection\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num); PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": could not establish connection\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num));
sc->sc_state = PPPOE_STATE_CLOSING; sc->sc_state = PPPOE_STATE_CLOSING;
sc->sc_linkStatusCB(sc->sc_pd, 0); /* notify upper layers */ sc->sc_linkStatusCB(sc->sc_pd, 0); /* notify upper layers */
@ -1096,8 +1096,8 @@ pppoe_ifattach_hook(void *arg, struct pbuf **mp, struct netif *ifp, int dir)
} }
if (sc->sc_sppp.pp_if.if_flags & IFF_UP) { if (sc->sc_sppp.pp_if.if_flags & IFF_UP) {
sc->sc_sppp.pp_if.if_flags &= ~(IFF_UP|IFF_RUNNING); sc->sc_sppp.pp_if.if_flags &= ~(IFF_UP|IFF_RUNNING);
printf("%c%c%"U16_F": ethernet interface detached, going down\n", PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": ethernet interface detached, going down\n",
sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num); sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num));
} }
sc->sc_ethif = NULL; sc->sc_ethif = NULL;
pppoe_clear_softc(sc, "ethernet interface detached"); pppoe_clear_softc(sc, "ethernet interface detached");