[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200930210707.10717-1-tparkin@katalix.com>
Date: Wed, 30 Sep 2020 22:07:01 +0100
From: Tom Parkin <tparkin@...alix.com>
To: netdev@...r.kernel.org
Cc: jchapman@...alix.com, Tom Parkin <tparkin@...alix.com>
Subject: [PATCH net-next 0/6] l2tp: add ac/pppoe driver
L2TPv2 tunnels are often used as a part of a home broadband connection,
using a PPP link to connect the subscriber network into the Internet
Service Provider's network.
In this scenario, PPPoE is widely used between the L2TP Access
Concentrator (LAC) and the subscriber. The LAC effectively acts as a
PPPoE server, switching PPP frames from incoming PPPoE packets into an
L2TP session. The PPP session is then terminated at the L2TP Network
Server (LNS) on the edge of the ISP's IP network.
This patchset adds a driver to the L2TP subsystem to support this mode
of operation.
The new driver, l2tp_ac_pppoe, adds support for the existing pseudowire
type L2TP_PWTYPE_PPP_AC, and is instantiated using the existing L2TP
netlink L2TP_CMD_SESSION_CREATE. It is expected to be used as follows:
* A userspace PPPoE daemon running on the LAC handles the PPPoE
discovery process up to the point of assigning a PPPoE session ID and
sending the PADS packet to the PPPoE peer to establish the PPPoE
session.
* Userspace code running on the LAC then instantiates an L2TP tunnel
and session with the LNS using the L2TP control protocol.
* Finally, the data path for PPPoE session frames through the L2TP
session to the LAC is instantiated by sending a genetlink
L2TP_CMD_SESSION_CREATE command to the kernel, including
the PPPoE-specific metadata required for L2TP_PWTYPE_PPP_AC sessions
(this is documented in the patch series commit comments).
Supporting this driver submission we have two examples of userspace
projects which use L2TP_PWTYPE_PPP_AC:
* https://github.com/katalix/l2tp-ktest
This is a unit-test suite for the kernel L2TP subsystem which has
been updated to include basic lifetime and datapath tests for
l2tp_ac_pppoe.
The new tests are automatically enabled when l2tp_ac_pppoe
availability is detected, and hence support for l2tp_ac_pppoe is on
the master branch of the git repository.
* https://github.com/katalix/go-l2tp
This is a Go library for building L2TP applications on Linux, and
includes a suite of example daemons which utilise the library.
The daemon kpppoed implements the PPPoE discovery protocol, and spawns
an instance of a daemon kl2tpd which handles the L2TP control protocol
and instantiates the kernel data path.
The code utilising l2tp_ac_pppoe is on the branch tp_002_pppoe_1
pending merge of this patchset in the kernel.
Notes on the patchset itself:
* Patches 1-4 lay groundwork for the addition of the new driver, making
tweaks to the l2tp netlink code to allow l2tp_ac_pppoe to access the
netlink attributes it requires.
* Patch 5 adds the new driver itself and hooks it into the kernel
configuration and build system.
* Patch 6 updates the l2tp documentation under Documentation/ to
include information about the new driver.
Tom Parkin (6):
l2tp: add netlink info to session create callback
l2tp: tweak netlink session create to allow L2TPv2 ac_pppoe
l2tp: allow v2 netlink session create to pass ifname attribute
l2tp: add netlink attributes for ac_ppp session creation
l2tp: add ac_pppoe pseudowire driver
docs: networking: update l2tp.rst to document PPP_AC pseudowires
Documentation/networking/l2tp.rst | 69 +++--
include/uapi/linux/l2tp.h | 2 +
net/l2tp/Kconfig | 7 +
net/l2tp/Makefile | 1 +
net/l2tp/l2tp_ac_pppoe.c | 446 ++++++++++++++++++++++++++++++
net/l2tp/l2tp_core.h | 4 +-
net/l2tp/l2tp_eth.c | 3 +-
net/l2tp/l2tp_netlink.c | 20 +-
net/l2tp/l2tp_ppp.c | 3 +-
9 files changed, 527 insertions(+), 28 deletions(-)
create mode 100644 net/l2tp/l2tp_ac_pppoe.c
--
2.17.1
Powered by blists - more mailing lists