xref: /linux/include/linux/l2tp.h (revision 309795f4bec2d69cd507a631f82065c2198a0825)
10d76751fSJames Chapman /*
20d76751fSJames Chapman  * L2TP-over-IP socket for L2TPv3.
30d76751fSJames Chapman  *
40d76751fSJames Chapman  * Author: James Chapman <jchapman@katalix.com>
50d76751fSJames Chapman  */
60d76751fSJames Chapman 
70d76751fSJames Chapman #ifndef _LINUX_L2TP_H_
80d76751fSJames Chapman #define _LINUX_L2TP_H_
90d76751fSJames Chapman 
100d76751fSJames Chapman #include <linux/types.h>
110d76751fSJames Chapman #ifdef __KERNEL__
120d76751fSJames Chapman #include <linux/socket.h>
130d76751fSJames Chapman #include <linux/in.h>
14*309795f4SJames Chapman #else
15*309795f4SJames Chapman #include <netinet/in.h>
160d76751fSJames Chapman #endif
170d76751fSJames Chapman 
180d76751fSJames Chapman #define IPPROTO_L2TP		115
190d76751fSJames Chapman 
200d76751fSJames Chapman /**
210d76751fSJames Chapman  * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
220d76751fSJames Chapman  * @l2tp_family:  address family number AF_L2TPIP.
230d76751fSJames Chapman  * @l2tp_addr:    protocol specific address information
240d76751fSJames Chapman  * @l2tp_conn_id: connection id of tunnel
250d76751fSJames Chapman  */
26*309795f4SJames Chapman #define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
270d76751fSJames Chapman struct sockaddr_l2tpip {
280d76751fSJames Chapman 	/* The first fields must match struct sockaddr_in */
290d76751fSJames Chapman 	sa_family_t	l2tp_family;	/* AF_INET */
300d76751fSJames Chapman 	__be16		l2tp_unused;	/* INET port number (unused) */
310d76751fSJames Chapman 	struct in_addr	l2tp_addr;	/* Internet address */
320d76751fSJames Chapman 
330d76751fSJames Chapman 	__u32		l2tp_conn_id;	/* Connection ID of tunnel */
340d76751fSJames Chapman 
350d76751fSJames Chapman 	/* Pad to size of `struct sockaddr'. */
360d76751fSJames Chapman 	unsigned char	__pad[sizeof(struct sockaddr) - sizeof(sa_family_t) -
370d76751fSJames Chapman 			      sizeof(__be16) - sizeof(struct in_addr) -
380d76751fSJames Chapman 			      sizeof(__u32)];
390d76751fSJames Chapman };
400d76751fSJames Chapman 
41*309795f4SJames Chapman /*****************************************************************************
42*309795f4SJames Chapman  *  NETLINK_GENERIC netlink family.
43*309795f4SJames Chapman  *****************************************************************************/
44*309795f4SJames Chapman 
45*309795f4SJames Chapman /*
46*309795f4SJames Chapman  * Commands.
47*309795f4SJames Chapman  * Valid TLVs of each command are:-
48*309795f4SJames Chapman  * TUNNEL_CREATE	- CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid
49*309795f4SJames Chapman  * TUNNEL_DELETE	- CONN_ID
50*309795f4SJames Chapman  * TUNNEL_MODIFY	- CONN_ID, udpcsum
51*309795f4SJames Chapman  * TUNNEL_GETSTATS	- CONN_ID, (stats)
52*309795f4SJames Chapman  * TUNNEL_GET		- CONN_ID, (...)
53*309795f4SJames Chapman  * SESSION_CREATE	- SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec
54*309795f4SJames Chapman  * SESSION_DELETE	- SESSION_ID
55*309795f4SJames Chapman  * SESSION_MODIFY	- SESSION_ID, data_seq
56*309795f4SJames Chapman  * SESSION_GET		- SESSION_ID, (...)
57*309795f4SJames Chapman  * SESSION_GETSTATS	- SESSION_ID, (stats)
58*309795f4SJames Chapman  *
59*309795f4SJames Chapman  */
60*309795f4SJames Chapman enum {
61*309795f4SJames Chapman 	L2TP_CMD_NOOP,
62*309795f4SJames Chapman 	L2TP_CMD_TUNNEL_CREATE,
63*309795f4SJames Chapman 	L2TP_CMD_TUNNEL_DELETE,
64*309795f4SJames Chapman 	L2TP_CMD_TUNNEL_MODIFY,
65*309795f4SJames Chapman 	L2TP_CMD_TUNNEL_GET,
66*309795f4SJames Chapman 	L2TP_CMD_SESSION_CREATE,
67*309795f4SJames Chapman 	L2TP_CMD_SESSION_DELETE,
68*309795f4SJames Chapman 	L2TP_CMD_SESSION_MODIFY,
69*309795f4SJames Chapman 	L2TP_CMD_SESSION_GET,
70*309795f4SJames Chapman 	__L2TP_CMD_MAX,
71*309795f4SJames Chapman };
72*309795f4SJames Chapman 
73*309795f4SJames Chapman #define L2TP_CMD_MAX			(__L2TP_CMD_MAX - 1)
74*309795f4SJames Chapman 
75*309795f4SJames Chapman /*
76*309795f4SJames Chapman  * ATTR types defined for L2TP
77*309795f4SJames Chapman  */
78*309795f4SJames Chapman enum {
79*309795f4SJames Chapman 	L2TP_ATTR_NONE,			/* no data */
80*309795f4SJames Chapman 	L2TP_ATTR_PW_TYPE,		/* u16, enum l2tp_pwtype */
81*309795f4SJames Chapman 	L2TP_ATTR_ENCAP_TYPE,		/* u16, enum l2tp_encap_type */
82*309795f4SJames Chapman 	L2TP_ATTR_OFFSET,		/* u16 */
83*309795f4SJames Chapman 	L2TP_ATTR_DATA_SEQ,		/* u16 */
84*309795f4SJames Chapman 	L2TP_ATTR_L2SPEC_TYPE,		/* u8, enum l2tp_l2spec_type */
85*309795f4SJames Chapman 	L2TP_ATTR_L2SPEC_LEN,		/* u8, enum l2tp_l2spec_type */
86*309795f4SJames Chapman 	L2TP_ATTR_PROTO_VERSION,	/* u8 */
87*309795f4SJames Chapman 	L2TP_ATTR_IFNAME,		/* string */
88*309795f4SJames Chapman 	L2TP_ATTR_CONN_ID,		/* u32 */
89*309795f4SJames Chapman 	L2TP_ATTR_PEER_CONN_ID,		/* u32 */
90*309795f4SJames Chapman 	L2TP_ATTR_SESSION_ID,		/* u32 */
91*309795f4SJames Chapman 	L2TP_ATTR_PEER_SESSION_ID,	/* u32 */
92*309795f4SJames Chapman 	L2TP_ATTR_UDP_CSUM,		/* u8 */
93*309795f4SJames Chapman 	L2TP_ATTR_VLAN_ID,		/* u16 */
94*309795f4SJames Chapman 	L2TP_ATTR_COOKIE,		/* 0, 4 or 8 bytes */
95*309795f4SJames Chapman 	L2TP_ATTR_PEER_COOKIE,		/* 0, 4 or 8 bytes */
96*309795f4SJames Chapman 	L2TP_ATTR_DEBUG,		/* u32 */
97*309795f4SJames Chapman 	L2TP_ATTR_RECV_SEQ,		/* u8 */
98*309795f4SJames Chapman 	L2TP_ATTR_SEND_SEQ,		/* u8 */
99*309795f4SJames Chapman 	L2TP_ATTR_LNS_MODE,		/* u8 */
100*309795f4SJames Chapman 	L2TP_ATTR_USING_IPSEC,		/* u8 */
101*309795f4SJames Chapman 	L2TP_ATTR_RECV_TIMEOUT,		/* msec */
102*309795f4SJames Chapman 	L2TP_ATTR_FD,			/* int */
103*309795f4SJames Chapman 	L2TP_ATTR_IP_SADDR,		/* u32 */
104*309795f4SJames Chapman 	L2TP_ATTR_IP_DADDR,		/* u32 */
105*309795f4SJames Chapman 	L2TP_ATTR_UDP_SPORT,		/* u16 */
106*309795f4SJames Chapman 	L2TP_ATTR_UDP_DPORT,		/* u16 */
107*309795f4SJames Chapman 	L2TP_ATTR_MTU,			/* u16 */
108*309795f4SJames Chapman 	L2TP_ATTR_MRU,			/* u16 */
109*309795f4SJames Chapman 	L2TP_ATTR_STATS,		/* nested */
110*309795f4SJames Chapman 	__L2TP_ATTR_MAX,
111*309795f4SJames Chapman };
112*309795f4SJames Chapman 
113*309795f4SJames Chapman #define L2TP_ATTR_MAX			(__L2TP_ATTR_MAX - 1)
114*309795f4SJames Chapman 
115*309795f4SJames Chapman /* Nested in L2TP_ATTR_STATS */
116*309795f4SJames Chapman enum {
117*309795f4SJames Chapman 	L2TP_ATTR_STATS_NONE,		/* no data */
118*309795f4SJames Chapman 	L2TP_ATTR_TX_PACKETS,		/* u64 */
119*309795f4SJames Chapman 	L2TP_ATTR_TX_BYTES,		/* u64 */
120*309795f4SJames Chapman 	L2TP_ATTR_TX_ERRORS,		/* u64 */
121*309795f4SJames Chapman 	L2TP_ATTR_RX_PACKETS,		/* u64 */
122*309795f4SJames Chapman 	L2TP_ATTR_RX_BYTES,		/* u64 */
123*309795f4SJames Chapman 	L2TP_ATTR_RX_SEQ_DISCARDS,	/* u64 */
124*309795f4SJames Chapman 	L2TP_ATTR_RX_OOS_PACKETS,	/* u64 */
125*309795f4SJames Chapman 	L2TP_ATTR_RX_ERRORS,		/* u64 */
126*309795f4SJames Chapman 	__L2TP_ATTR_STATS_MAX,
127*309795f4SJames Chapman };
128*309795f4SJames Chapman 
129*309795f4SJames Chapman #define L2TP_ATTR_STATS_MAX		(__L2TP_ATTR_STATS_MAX - 1)
130*309795f4SJames Chapman 
131*309795f4SJames Chapman enum l2tp_pwtype {
132*309795f4SJames Chapman 	L2TP_PWTYPE_NONE = 0x0000,
133*309795f4SJames Chapman 	L2TP_PWTYPE_ETH_VLAN = 0x0004,
134*309795f4SJames Chapman 	L2TP_PWTYPE_ETH = 0x0005,
135*309795f4SJames Chapman 	L2TP_PWTYPE_PPP = 0x0007,
136*309795f4SJames Chapman 	L2TP_PWTYPE_PPP_AC = 0x0008,
137*309795f4SJames Chapman 	L2TP_PWTYPE_IP = 0x000b,
138*309795f4SJames Chapman 	__L2TP_PWTYPE_MAX
139*309795f4SJames Chapman };
140*309795f4SJames Chapman 
141*309795f4SJames Chapman enum l2tp_l2spec_type {
142*309795f4SJames Chapman 	L2TP_L2SPECTYPE_NONE,
143*309795f4SJames Chapman 	L2TP_L2SPECTYPE_DEFAULT,
144*309795f4SJames Chapman };
145*309795f4SJames Chapman 
146*309795f4SJames Chapman enum l2tp_encap_type {
147*309795f4SJames Chapman 	L2TP_ENCAPTYPE_UDP,
148*309795f4SJames Chapman 	L2TP_ENCAPTYPE_IP,
149*309795f4SJames Chapman };
150*309795f4SJames Chapman 
151*309795f4SJames Chapman enum l2tp_seqmode {
152*309795f4SJames Chapman 	L2TP_SEQ_NONE = 0,
153*309795f4SJames Chapman 	L2TP_SEQ_IP = 1,
154*309795f4SJames Chapman 	L2TP_SEQ_ALL = 2,
155*309795f4SJames Chapman };
156*309795f4SJames Chapman 
157*309795f4SJames Chapman /*
158*309795f4SJames Chapman  * NETLINK_GENERIC related info
159*309795f4SJames Chapman  */
160*309795f4SJames Chapman #define L2TP_GENL_NAME		"l2tp"
161*309795f4SJames Chapman #define L2TP_GENL_VERSION	0x1
162*309795f4SJames Chapman 
1630d76751fSJames Chapman #endif
164