Page MenuHomeVyOS Platform

VPP PPPoE with RADIUS Idle-Timeout: sessions drop every 60 s, accounting reports 0 bytes used
In progress, NormalPublicBUG

Description

With the PPPoE server on a VPP-owned interface and RADIUS returning an Idle-Timeout attribute, every subscriber session is torn down 60 s after it comes up and immediately redials. RADIUS records the disconnect as Acct-Terminate-Cause NAS-Error. Session traffic counters never move: "show pppoe-server sessions" shows 0 B / 0 B and every accounting record reports 0 bytes used, even while traffic is forwarding normally. Both symptoms have the same cause. PPPoE on the kernel dataplane is unaffected.

Steps to reproduce:

1. set vpp settings interface eth1             
2. set service pppoe-server interface eth1      (+ client-ip-pool, gateway-address)
3. set service pppoe-server authentication mode radius
   set service pppoe-server authentication radius server <ip> key <secret>
4. Have RADIUS return Idle-Timeout = 600 in the Access-Accept
5. Connect a subscriber and watch the session

Result:
The session dies at 63 s and redials, indefinitely:

<Acct-Status-Type Stop> <Acct-Session-Time 63> <Acct-Input-Octets 0> <Acct-Output-Octets 0>
<Acct-Terminate-Cause NAS-Error>

No "idle timeout" is logged, the teardown is a silent failure path. Without VPP the session runs past 180 s, no NAS-Error stops.

Root cause:
A VPP-terminated session has no kernel interface, so ses->ifindex keeps its init value -1 (session.c:80): vpphooks.c sets vpp_sw_if_index but never ses->ifindex, and ifcfg.c:103 skips the ifcfg routine for hook-owned sessions.

  • ap_session_read_stats() returns -1 at session.c:420 ("if (ses->ifindex == -1) return -1;") silently, with no log line, so counters never update and radius/acct.c:59 uses the same call, hence 0 bytes in accounting.
  • ap_session_timer() treats that failure as fatal (session.c:145-147): if (ap_session_read_stats(ses, NULL)) ap_session_terminate(ses, TERM_NAS_ERROR, 0); RADIUS Idle-Timeout arms this timer, which ticks every 60 s (timer.period = 60000).

Details

Version
2026.08.13-0024-rolling
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)

Event Timeline

Viacheslav changed the task status from Open to In progress.Sep 10 2026, 1:43 PM
Viacheslav assigned this task to rherold.
Viacheslav triaged this task as Normal priority.

I was testing vyos as BNG for my network especially with vpp. But I faced same issue. I hope issue will be resolved soon

@saadinnocent909 can you test my PR in your environment?

can you share me patched iso or lates rolling release includes the PR ?

@saadinnocent909 there is no ISO or rolling image with the fix, the PR (https://github.com/accel-ppp/accel-ppp-ng/pull/42) is still in review. Here is a test build of the three changed files that you can put on an existing rolling system:

https://cloud.insecure.pw/s/GwgfJ2YWdDT3N7a
sha256: 480ac868d80b7e1dcb0cca9eb3c50a66d3bbd050627fd8f43ebd6965eabe1798

What it is: accel-ppp-ng at the commit that rolling uses (dd07b23) plus the four commits of the PR. It contains accel-pppd, libradius.so and libvyos_vpp.so.

Requirements: a rolling image with VPP 25.10.0 (it links against these libraries). I built and loaded it on 2026.10.16-0024-rolling. A rolling image that uses another VPP version or another accel-ppp-ng commit can fail to load it. Check with show version and dpkg -l | grep libvppinfra.

Install, as root:

tar xzf accel-ppp-ng-T9211.tar.gz
cd accel-ppp-ng-T9211
./install.sh

The script keeps the original files in /root/accel-ppp-ng.orig and restarts accel-ppp@pppoe. Established PPPoE sessions are dropped by the restart. ./restore.sh puts the originals back. A reboot or an image update also replaces the files again.

What to check: with the RADIUS Idle-Timeout, sessions should no longer drop every 60 seconds and the accounting should report the real byte counters. Please post what you see, with the Idle-Timeout value and the output of show pppoe-server sessions.

What I tested: the build loads, accel-ppp@pppoe starts with vyos_vpp and the install and restore scripts work. I did not run a PPPoE client session over VPP with Idle-Timeout, so your test is the first real check of the fix.

Tomorrow I will give it a try and update you.

I did some testing with patch. Counters started working and I started to
get usage in freeradius interim accounting updates. But I also noticed
another issue if I kick a user using reset command all users are
disconnected. Tomorrow I will share stats as well and will do some more
testing. Idle timeout and session timout I will check these as well
tomorrow