***********************************************************************/
static char const RCSID[] =
-"$Id: discovery.c,v 1.1 2001/12/14 02:55:20 mostrows Exp $";
+"$Id: discovery.c,v 1.4 2005/03/22 10:22:32 paulus Exp $";
#include "pppoe.h"
if (!packetIsForMe(conn, &packet)) continue;
if (packet.code == CODE_PADO) {
- if (NOT_UNICAST(packet.ethHdr.h_source)) {
- printErr("Ignoring PADO packet from non-unicast MAC address");
+ if (BROADCAST(packet.ethHdr.h_source)) {
+ printErr("Ignoring PADO packet from broadcast MAC address");
continue;
}
parsePacket(&packet, parsePADOTags, &pc);
/* Skip discovery? */
if (conn->skipDiscovery) {
conn->discoveryState = STATE_SESSION;
- if (conn->killSession) {
- sendPADT(conn, "RP-PPPoE: Session killed manually");
- exit(0);
- }
return;
}
do {
padiAttempts++;
if (padiAttempts > MAX_PADI_ATTEMPTS) {
- rp_fatal("Timeout waiting for PADO packets");
+ warn("Timeout waiting for PADO packets");
+ close(conn->discoverySocket);
+ conn->discoverySocket = -1;
+ return;
}
sendPADI(conn);
conn->discoveryState = STATE_SENT_PADI;
/* If we're only printing access concentrator names, we're done */
if (conn->printACNames) {
- printf("--------------------------------------------------\n");
- exit(0);
+ die(0);
}
timeout = PADI_TIMEOUT;
do {
padrAttempts++;
if (padrAttempts > MAX_PADI_ATTEMPTS) {
- rp_fatal("Timeout waiting for PADS packets");
+ warn("Timeout waiting for PADS packets");
+ close(conn->discoverySocket);
+ conn->discoverySocket = -1;
+ return;
}
sendPADR(conn);
conn->discoveryState = STATE_SENT_PADR;