resend [PATCH 2/5 2.6.21] L2TP: Changes to existing ppp and socket kernel headers for L2TP

3 messages, 2 authors, 2007-06-27 · open the first message on its own page

resend [PATCH 2/5 2.6.21] L2TP: Changes to existing ppp and socket kernel headers for L2TP

From: James Chapman <jchapman@katalix.com>
Date: 2007-05-26 17:48:08

Add struct sockaddr_pppol2tp to carry L2TP-specific address
information for the PPPoX (PPPoL2TP) socket. Unfortunately we can't
use the union inside struct sockaddr_pppox because the L2TP-specific
data is larger than the current size of the union and we must preserve
the size of struct sockaddr_pppox for binary compatibility.

Also add a PPPIOCGL2TPSTATS ioctl to allow userspace to obtain
L2TP counters and state from the kernel.

Signed-off-by: James Chapman <jchapman@katalix.com>

Index: linux-2.6.21/include/linux/if_ppp.h
===================================================================
--- linux-2.6.21.orig/include/linux/if_ppp.h
+++ linux-2.6.21/include/linux/if_ppp.h
@@ -110,6 +110,21 @@ struct ifpppcstatsreq {
 	struct ppp_comp_stats stats;
 };
 
+/* For PPPIOCGL2TPSTATS */
+struct pppol2tp_ioc_stats {
+	__u16	tunnel_id;	/* redundant */
+	__u16	session_id;	/* if zero, get tunnel stats */
+	__u32	using_ipsec:1;	/* valid only for session_id == 0 */
+	__u64	tx_packets;
+	__u64	tx_bytes;
+	__u64	tx_errors;
+	__u64	rx_packets;
+	__u64	rx_bytes;
+	__u64	rx_seq_discards;
+	__u64	rx_oos_packets;
+	__u64	rx_errors;
+};
+
 #define ifr__name       b.ifr_ifrn.ifrn_name
 #define stats_ptr       b.ifr_ifru.ifru_data
 
@@ -146,6 +161,7 @@ struct ifpppcstatsreq {
 #define PPPIOCDISCONN	_IO('t', 57)		/* disconnect channel */
 #define PPPIOCATTCHAN	_IOW('t', 56, int)	/* attach to ppp channel */
 #define PPPIOCGCHAN	_IOR('t', 55, int)	/* get ppp channel number */
+#define PPPIOCGL2TPSTATS _IOR('t', 54, struct pppol2tp_ioc_stats)
 
 #define SIOCGPPPSTATS   (SIOCDEVPRIVATE + 0)
 #define SIOCGPPPVER     (SIOCDEVPRIVATE + 1)	/* NEVER change this!! */
Index: linux-2.6.21/include/linux/if_pppox.h
===================================================================
--- linux-2.6.21.orig/include/linux/if_pppox.h
+++ linux-2.6.21/include/linux/if_pppox.h
@@ -27,6 +27,7 @@
 #include <asm/semaphore.h>
 #include <linux/ppp_channel.h>
 #endif /* __KERNEL__ */
+#include <linux/if_pppol2tp.h>
 
 /* For user-space programs to pick up these definitions
  * which they wouldn't get otherwise without defining __KERNEL__
@@ -50,8 +51,9 @@ struct pppoe_addr{ 
  * Protocols supported by AF_PPPOX 
  */ 
 #define PX_PROTO_OE    0 /* Currently just PPPoE */
-#define PX_MAX_PROTO   1	
- 
+#define PX_PROTO_OL2TP 1 /* Now L2TP also */
+#define PX_MAX_PROTO   2
+
 struct sockaddr_pppox { 
        sa_family_t     sa_family;            /* address family, AF_PPPOX */ 
        unsigned int    sa_protocol;          /* protocol identifier */ 
@@ -60,6 +62,16 @@ struct sockaddr_pppox { 
        }sa_addr; 
 }__attribute__ ((packed)); 
 
+/* The use of the above union isn't viable because the size of this
+ * struct must stay fixed over time -- applications use sizeof(struct
+ * sockaddr_pppox) to fill it. We use a protocol specific sockaddr
+ * type instead.
+ */
+struct sockaddr_pppol2tp {
+	sa_family_t     sa_family;      /* address family, AF_PPPOX */
+	unsigned int    sa_protocol;    /* protocol identifier */
+	struct pppol2tp_addr pppol2tp;
+}__attribute__ ((packed));
 
 /*********************************************************************
  *
Index: linux-2.6.21/include/linux/socket.h
===================================================================
--- linux-2.6.21.orig/include/linux/socket.h
+++ linux-2.6.21/include/linux/socket.h
@@ -284,6 +284,7 @@ struct ucred {
 #define SOL_DCCP	269
 #define SOL_NETLINK	270
 #define SOL_TIPC	271
+#define SOL_PPPOL2TP	272
 
 /* IPX options */
 #define IPX_TYPE	1

Re: resend [PATCH 2/5 2.6.21] L2TP: Changes to existing ppp and socket kernel headers for L2TP

From: David Miller <davem@davemloft.net>
Date: 2007-06-27 07:18:05

From: James Chapman <jchapman@katalix.com>
Date: Sat, 26 May 2007 18:47:24 +0100
Add struct sockaddr_pppol2tp to carry L2TP-specific address
information for the PPPoX (PPPoL2TP) socket. Unfortunately we can't
use the union inside struct sockaddr_pppox because the L2TP-specific
data is larger than the current size of the union and we must preserve
the size of struct sockaddr_pppox for binary compatibility.

Also add a PPPIOCGL2TPSTATS ioctl to allow userspace to obtain
L2TP counters and state from the kernel.

Signed-off-by: James Chapman <jchapman@katalix.com>
This looks OK, patch applied to net-2.6.23, thanks.
quoted hunk
Index: linux-2.6.21/include/linux/socket.h
===================================================================
--- linux-2.6.21.orig/include/linux/socket.h
+++ linux-2.6.21/include/linux/socket.h
@@ -284,6 +284,7 @@ struct ucred {
 #define SOL_DCCP	269
 #define SOL_NETLINK	270
 #define SOL_TIPC	271
+#define SOL_PPPOL2TP	272
RXRPC has already taken value 272 so I changed this
to use the next available value, 273.

Re: resend [PATCH 2/5 2.6.21] L2TP: Changes to existing ppp and socket kernel headers for L2TP

From: David Miller <davem@davemloft.net>
Date: 2007-06-27 08:00:17

From: David Miller <davem@davemloft.net>
Date: Wed, 27 Jun 2007 00:18:24 -0700 (PDT)
From: James Chapman <jchapman@katalix.com>
Date: Sat, 26 May 2007 18:47:24 +0100
quoted
Add struct sockaddr_pppol2tp to carry L2TP-specific address
information for the PPPoX (PPPoL2TP) socket. Unfortunately we can't
use the union inside struct sockaddr_pppox because the L2TP-specific
data is larger than the current size of the union and we must preserve
the size of struct sockaddr_pppox for binary compatibility.

Also add a PPPIOCGL2TPSTATS ioctl to allow userspace to obtain
L2TP counters and state from the kernel.

Signed-off-by: James Chapman <jchapman@katalix.com>
This looks OK, patch applied to net-2.6.23, thanks.
Actually, I had to back this out because it depended upon
header files added by subsequent patches and thus broke
the build.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help