* Waits for a PADO packet and copies useful information
***********************************************************************/
void
-waitForPADO(PPPoEConnection *conn, int timeout)
+waitForPADO(PPPoEConnection *conn, int timeout, int waitWholeTimeoutForPADO)
{
fd_set readable;
int r;
conn->discoveryState = STATE_RECEIVED_PADO;
}
}
- } while (pppoe_verbose >= 1 || conn->discoveryState != STATE_RECEIVED_PADO);
+ } while (waitWholeTimeoutForPADO || conn->discoveryState != STATE_RECEIVED_PADO);
}
/***********************************************************************
* Performs the PPPoE discovery phase 1
***********************************************************************/
void
-discovery1(PPPoEConnection *conn)
+discovery1(PPPoEConnection *conn, int waitWholeTimeoutForPADO)
{
int padiAttempts = 0;
int timeout = conn->discoveryTimeout;
}
sendPADI(conn);
conn->discoveryState = STATE_SENT_PADI;
- waitForPADO(conn, timeout);
+ waitForPADO(conn, timeout, waitWholeTimeoutForPADO);
timeout *= 2;
} while (conn->discoveryState == STATE_SENT_PADI);
error("Failed to create PPPoE discovery socket: %m");
goto errout;
}
- discovery1(conn);
+ discovery1(conn, 0);
/* discovery1() may update conn->mtu and conn->mru */
lcp_allowoptions[0].mru = conn->mtu;
lcp_wantoptions[0].mru = conn->mru;
void clampMSS(PPPoEPacket *packet, char const *dir, int clampMss);
UINT16_t computeTCPChecksum(unsigned char *ipHdr, unsigned char *tcpHdr);
UINT16_t pppFCS16(UINT16_t fcs, unsigned char *cp, int len);
-void discovery1(PPPoEConnection *conn);
+void discovery1(PPPoEConnection *conn, int waitWholeTimeoutForPADO);
void discovery2(PPPoEConnection *conn);
unsigned char *findTag(PPPoEPacket *packet, UINT16_t tagType,
PPPoETag *tag);