From: Dominique Martinet <asmadeus@codewreck.org>
To: Samuel Thibault <samuel.thibault@ens-lyon.org>
Cc: James Chapman <jchapman@katalix.com>,
tparkin@katalix.com, edumazet@google.com, davem@davemloft.net,
kuba@kernel.org, pabeni@redhat.com, corbet@lwn.net,
netdev@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] PPPoL2TP: Add more code snippets
Date: Mon, 17 Apr 2023 07:26:41 +0900 [thread overview]
Message-ID: <ZDx2IUYTmLSdzU6D@codewreck.org> (raw)
In-Reply-To: <20230416220704.xqk4q6uwjbujnqpv@begin>
Samuel Thibault wrote on Mon, Apr 17, 2023 at 12:07:04AM +0200:
> The existing documentation was not telling that one has to create a PPP
> channel and a PPP interface to get PPPoL2TP data offloading working.
>
> Also, tunnel switching was not described, so that people were thinking
> it was not supported, while it actually is.
>
> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Just passing by, thanks!
The update made me ask a couple more questions so I've commented below,
but I think this is already useful in itself so don't hold back for me.
> ---
> Documentation/networking/l2tp.rst | 59 ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 56 insertions(+), 3 deletions(-)
>
> --- a/Documentation/networking/l2tp.rst
> +++ b/Documentation/networking/l2tp.rst
> @@ -387,11 +387,12 @@ Sample userspace code:
> - Create session PPPoX data socket::
>
> struct sockaddr_pppol2tp sax;
> - int fd;
> + int ret;
>
> /* Note, the tunnel socket must be bound already, else it
> * will not be ready
> */
> + int session_fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP);
> sax.sa_family = AF_PPPOX;
> sax.sa_protocol = PX_PROTO_OL2TP;
> sax.pppol2tp.fd = tunnel_fd;
> @@ -406,12 +407,64 @@ Sample userspace code:
> /* session_fd is the fd of the session's PPPoL2TP socket.
> * tunnel_fd is the fd of the tunnel UDP / L2TPIP socket.
> */
> - fd = connect(session_fd, (struct sockaddr *)&sax, sizeof(sax));
> - if (fd < 0 ) {
> + ret = connect(session_fd, (struct sockaddr *)&sax, sizeof(sax));
> + if (ret < 0 ) {
> return -errno;
> }
> return 0;
>
> + - Create PPP channel::
> +
> + int chindx;
> + ret = ioctl(session_fd, PPPIOCGCHAN, &chindx);
> + if (ret < 0)
> + return -errno;
> +
> + int ppp_chan_fd = open("/dev/ppp", O_RDWR);
> +
> + ret = ioctl(ppp_chan_fd, PPPIOCATTCHAN, &chindx);
> + if (ret < 0)
> + return -errno;
> +
> +Non-data PPP frames will be available for read on `ppp_chan_fd`.
> +
> + - Create PPP interface::
> +
> + int ppp_if_fd = open("/dev/ppp", O_RDWR);
> +
> + int ifunit;
> + ret = ioctl(ppp_if_fd, PPPIOCNEWUNIT, &ifunit);
> + if (ret < 0)
> + return -errno;
> +
> + ret = ioctl(ppp_chan_fd, PPPIOCCONNECT, ifunit);
> + if (ret < 0)
> + return -errno;
> +
> +The ppp<ifunit> interface can then be configured as usual with SIOCSIFMTU,
> +SIOCSIFADDR, SIOCSIFDSTADDR, SIOCSIFNETMASK, and activated by setting IFF_UP
> +with SIOCSIFFLAGS
(That somewhat makes it sounds like the "new" netlink interface cannot
be used (e.g. ip command); although I guess sommeone implementing this
would be more likely to use the ioctls than not so having the names can
be a timesaver?)
Also, this got me wondering if the 'if' fd can be closed immediately or
if the interface will be removed when the fd is closed (probably not?)
If the fd can immediately be closed, could the chan fd or another fd be
used instead, saving an open?
> +
> + - Tunnel switching is supported by bridging channels::
> +
> + int chindx;
> + ret = ioctl(session_fd, PPPIOCGCHAN, &chindx);
> + if (ret < 0)
> + return -errno;
> +
> + int chindx2;
> + ret = ioctl(session_fd2, PPPIOCGCHAN, &chind2x);
> + if (ret < 0)
> + return -errno;
> +
> + int ppp_chan_fd = open("/dev/ppp", O_RDWR);
> +
> + ret = ioctl(ppp_chan_fd, PPPIOCBRIDGECHAN, &chindx2);
> + if (ret < 0)
> + return -errno;
> +
> + close(ppp_chan_fd);
> +
> Old L2TPv2-only API
> -------------------
>
--
Dominique Martinet | Asmadeus
next prev parent reply other threads:[~2023-04-16 22:27 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-16 22:07 [PATCH] PPPoL2TP: Add more code snippets Samuel Thibault
2023-04-16 22:26 ` Dominique Martinet [this message]
2023-04-16 22:43 ` Samuel Thibault
2023-04-18 8:03 ` Guillaume Nault
2023-04-18 8:14 ` Guillaume Nault
2023-04-18 8:34 ` Guillaume Nault
2023-04-18 8:53 ` Samuel Thibault
2023-04-18 9:06 ` Guillaume Nault
2023-04-18 9:11 ` Samuel Thibault
2023-04-18 10:17 ` Guillaume Nault
2023-04-18 10:31 ` Samuel Thibault
2023-04-18 11:25 ` Guillaume Nault
2023-04-18 11:54 ` Samuel Thibault
2023-04-18 13:38 ` Guillaume Nault
2023-04-18 14:18 ` Samuel Thibault
2023-04-19 10:49 ` Tom Parkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZDx2IUYTmLSdzU6D@codewreck.org \
--to=asmadeus@codewreck.org \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jchapman@katalix.com \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=samuel.thibault@ens-lyon.org \
--cc=tparkin@katalix.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).