waitForPADO is a part of PPPoE discovery procedure. This function ignore timeout parameter use it only for delay in select(). If any pppoe garbage packet recived, recive retryed with waiting next packet with SAME timeout value. In case of no responce from server, and continuous flow PPPoE discovery packets in ethernet segment waitForPADO never returns. This actually occurs when pppoe server temporary failure and other clients trying to recover connection. So pppoe server did not reply because PADI request is sent for a long time. New PADI should be sended but pppd only waiting. Hung. Reproducible: Always Steps to Reproduce: 1. Connect 2 computer by ethrnet network without pppoe server. 2. start pppd on first computer: pppd debug connect true plugin rp-pppoe.so eth0 3. start packet generator on other to emulate other pppoe clients: # scapy >>> sendp(PPPoED(code=0x09), iface="eth0", loop=1, inter=3) Actual Results: pppd send PADI only once and wait PADO forewer. Expected Results: pppd should send PADI after waiting PADO timeout expired.
Created attachment 250023 [details, diff] USE timeout in PADO and PADS waiting
Created attachment 250253 [details, diff] difftime fix
Did you reported the problem upstream?
(In reply to comment #3) Yes (by http://samba.org/cgi-bin/ppp-bugs/), but didn't get any responce.
Fixed in 2.4.5-r1, thanks!