<feed xmlns='http://www.w3.org/2005/Atom'>
<title>accel-ppp.git/accel-pppd/ctrl/ipoe/ipoe_netlink.c, branch 1.15.0</title>
<subtitle>High performance PPTP/L2TP/SSTP/PPPoE/IPoE server for Linux (mirror of https://github.com/accel-ppp/accel-ppp.git)
</subtitle>
<id>https://git.amelek.net/accel-ppp/accel-ppp.git/atom?h=1.15.0</id>
<link rel='self' href='https://git.amelek.net/accel-ppp/accel-ppp.git/atom?h=1.15.0'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/'/>
<updated>2026-08-08T21:18:35+00:00</updated>
<entry>
<title>fixup! ipoe: flush sessions left by a previous instance with a single command</title>
<updated>2026-08-08T21:18:35+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-08T21:18:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=2b46f1c69ca77efc317673b080d4773db09a4a3e'/>
<id>urn:sha1:2b46f1c69ca77efc317673b080d4773db09a4a3e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fixup! ipoe: flush sessions left by a previous instance with a single command</title>
<updated>2026-08-08T20:57:09+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-08T20:57:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=811f87f071659410f9126d51b6ef72a4c64a02a9'/>
<id>urn:sha1:811f87f071659410f9126d51b6ef72a4c64a02a9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fixup! ipoe: flush sessions left by a previous instance with a single command</title>
<updated>2026-08-08T20:17:46+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-08T20:17:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=fc465210fb77af7d6a12780f3f256d17be2ce480'/>
<id>urn:sha1:fc465210fb77af7d6a12780f3f256d17be2ce480</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipoe: flush sessions left by a previous instance with a single command</title>
<updated>2026-08-08T14:47:49+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-08T14:47:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=6693d18ae0232da2c6febc0decf099e4fd064381'/>
<id>urn:sha1:6693d18ae0232da2c6febc0decf099e4fd064381</id>
<content type='text'>
On startup accel-pppd is expected to drop everything a previous instance
left behind in the kernel. For sessions it did so by dumping them with
IPOE_CMD_GET and sending one IPOE_CMD_DELETE per ifindex. That dump was
written for the session backup code removed in 1972a7e5c and was never
adapted to its new, destructive role:

 - it was issued on the socket subscribed to the packet multicast group,
   so it competed with the notifications that the still attached stale
   rx handlers keep generating; on a loaded box the receive buffer
   overruns and rtnl_dump_filter() gives up with ENOBUFS,
 - its return value was discarded, so such a failure was silent,
 - it ran before the interfaces were detached, which is what produces
   those notifications in the first place,
 - it was skipped entirely when the multicast group could not be
   resolved, again with nothing but a warning about packet handling,
 - and every session cost a socket, a round trip, a grace period and a
   full unregister_netdev().

Whatever it missed stays in the kernel forever: the daemon has no record
of those sessions, so nothing ever deletes them, and every subscriber
later assigned one of their addresses is refused with EEXIST by
IPOE_CMD_MODIFY.

Add IPOE_CMD_FLUSH, which unlinks all sessions in one go, waits for a
single grace period and unregisters the devices with
unregister_netdevice_many(), and use it instead. The old path is kept as
a fallback for a module predating the command, which is reported as
EOPNOTSUPP, and now checks its return value and uses a private socket.

Reorder init() so the interfaces are detached before the multicast group
is joined, and so the flush also runs when only the group lookup failed.
</content>
</entry>
<entry>
<title>ipoe: zero generic netlink requests before filling them in</title>
<updated>2026-08-08T14:45:35+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-08T14:45:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=af009c87b41ea1bb594d68e53d46ca050057e2db'/>
<id>urn:sha1:af009c87b41ea1bb594d68e53d46ca050057e2db</id>
<content type='text'>
The request buffers are plain stack variables and only the nlmsghdr
fields and genlmsghdr.cmd were ever assigned, so genlmsghdr.version and
genlmsghdr.reserved reached the kernel holding whatever happened to be
on the stack.

Since 6.1 genetlink validates the reserved header fields of every
command whose id is &gt;= genl_family.resv_start_op, and ipoe sets that
field to CTRL_CMD_GETPOLICY + 1, i.e. 11. IPOE_CMD_DEL_NET is 11, so
ipoe_nl_del_net(), which runs on startup and on every config reload, is
already rejected with EINVAL whenever that garbage is nonzero, and any
command added after it is affected as well.
</content>
</entry>
<entry>
<title>Replace linux/if.h with net/if.h include</title>
<updated>2026-02-22T21:01:03+00:00</updated>
<author>
<name>marekm72</name>
<email>35698605+marekm72@users.noreply.github.com</email>
</author>
<published>2026-02-22T21:01:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=1314586acfc2a99c0c72cda1f517b441599719a5'/>
<id>urn:sha1:1314586acfc2a99c0c72cda1f517b441599719a5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipoe: check for local-net in arp requests</title>
<updated>2021-09-08T13:59:16+00:00</updated>
<author>
<name>Dmitry Kozlov</name>
<email>xeb@mail.ru</email>
</author>
<published>2021-09-08T13:59:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=faf7d93f34f588e0a8b1f1acc9ab421702831dc4'/>
<id>urn:sha1:faf7d93f34f588e0a8b1f1acc9ab421702831dc4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipoe/vlan_mon: add check for already loaded module</title>
<updated>2019-01-18T22:33:19+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2019-01-18T22:28:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=56ff710d582cdd16dd9a5893ca0f027b3fd923eb'/>
<id>urn:sha1:56ff710d582cdd16dd9a5893ca0f027b3fd923eb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>load ipoe and vlan_mon module on start</title>
<updated>2018-08-24T07:45:21+00:00</updated>
<author>
<name>Dmitry Kozlov</name>
<email>xeb@mail.ru</email>
</author>
<published>2018-08-24T07:45:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=938bad250baa7bd6f0761e70ce68a2de063c528c'/>
<id>urn:sha1:938bad250baa7bd6f0761e70ce68a2de063c528c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipoe: do not create ipoe interface with server's ifindex</title>
<updated>2018-01-09T18:49:25+00:00</updated>
<author>
<name>Dmitry Kozlov</name>
<email>xeb@mail.ru</email>
</author>
<published>2018-01-09T18:49:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=109e23ab396db599911deaba2dd06bcc3081f5ea'/>
<id>urn:sha1:109e23ab396db599911deaba2dd06bcc3081f5ea</id>
<content type='text'>
</content>
</entry>
</feed>
