diff options
| author | Denys Fedoryshchenko <denys.f@collabora.com> | 2026-09-01 02:49:13 +0300 |
|---|---|---|
| committer | Denys Fedoryshchenko <denys.f@collabora.com> | 2026-09-01 07:13:12 +0300 |
| commit | 354eb9214483949e86f0f8b66a531def30205646 (patch) | |
| tree | 5049e240fbf1102ffcf4a0470742624ef27b6207 /drivers | |
| parent | 40575b78b7bb043c7a0ff4dd29a048be056dee9f (diff) | |
| download | accel-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 'drivers')
0 files changed, 0 insertions, 0 deletions
