netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] PPPoL2TP: Add more code snippets
@ 2023-04-16 22:07 Samuel Thibault
  2023-04-16 22:26 ` Dominique Martinet
  2023-04-18  8:34 ` Guillaume Nault
  0 siblings, 2 replies; 16+ messages in thread
From: Samuel Thibault @ 2023-04-16 22:07 UTC (permalink / raw)
  To: James Chapman, tparkin, edumazet
  Cc: davem, kuba, pabeni, corbet, netdev, linux-doc, linux-kernel

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>

---
 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
+
+  - 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
 -------------------
 

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2023-04-19 10:58 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-16 22:07 [PATCH] PPPoL2TP: Add more code snippets Samuel Thibault
2023-04-16 22:26 ` Dominique Martinet
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

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).