summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <denys.f@collabora.com>2026-09-01 02:49:13 +0300
committerDenys Fedoryshchenko <denys.f@collabora.com>2026-09-01 07:13:12 +0300
commit354eb9214483949e86f0f8b66a531def30205646 (patch)
tree5049e240fbf1102ffcf4a0470742624ef27b6207 /tests
parent40575b78b7bb043c7a0ff4dd29a048be056dee9f (diff)
downloadaccel-ppp-354eb9214483949e86f0f8b66a531def30205646.tar.gz
accel-ppp-354eb9214483949e86f0f8b66a531def30205646.zip
ppp: do not answer IPCP/IPV6CP ConfReq with TermAck while CCP negotiates
When the peer's IPCP (or IPV6CP) ConfReq arrives before CCP negotiation has finished, delay_ack is set and send_conf_ack() answers with a TermAck instead of the ConfAck. A TermAck is only a valid response to a TermReq, and the trick relies on the peer retransmitting its ConfReq: conformant peers recover only after their restart timer (3 seconds added to session setup), while some clients (MikroTik RouterOS over L2TP, see issue #353) treat it as a failure and drop the session. Withhold the ConfAck instead and send it as soon as CCP settles. CCP now notifies IPCP/IPV6CP when it comes up or gives up (passive); that clears delay_ack, brings the layer up if the FSM is already Opened, and flushes the withheld ConfAck. Nothing is sent to the peer while CCP is still in progress, so IP data cannot flow before MPPE is set up. Verified with pppoe + mschap-v2: with mppe=prefer and a client that does not require MPPE, the peer's ConfReq used to be answered with a TermAck and the session came up 3 seconds later; now the ConfAck is emitted right after ccp_layer_started and the session comes up immediately. mppe=require and mppe=deny sessions are unaffected.
Diffstat (limited to 'tests')
0 files changed, 0 insertions, 0 deletions