xref: /aosp_15_r20/external/iproute2/include/uapi/linux/l2tp.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*de1e4e89SAndroid Build Coastguard Worker /*
3*de1e4e89SAndroid Build Coastguard Worker  * L2TP-over-IP socket for L2TPv3.
4*de1e4e89SAndroid Build Coastguard Worker  *
5*de1e4e89SAndroid Build Coastguard Worker  * Author: James Chapman <[email protected]>
6*de1e4e89SAndroid Build Coastguard Worker  */
7*de1e4e89SAndroid Build Coastguard Worker 
8*de1e4e89SAndroid Build Coastguard Worker #ifndef _LINUX_L2TP_H_
9*de1e4e89SAndroid Build Coastguard Worker #define _LINUX_L2TP_H_
10*de1e4e89SAndroid Build Coastguard Worker 
11*de1e4e89SAndroid Build Coastguard Worker #include <linux/types.h>
12*de1e4e89SAndroid Build Coastguard Worker #include <linux/socket.h>
13*de1e4e89SAndroid Build Coastguard Worker #include <linux/in.h>
14*de1e4e89SAndroid Build Coastguard Worker #include <linux/in6.h>
15*de1e4e89SAndroid Build Coastguard Worker 
16*de1e4e89SAndroid Build Coastguard Worker #define IPPROTO_L2TP		115
17*de1e4e89SAndroid Build Coastguard Worker 
18*de1e4e89SAndroid Build Coastguard Worker /**
19*de1e4e89SAndroid Build Coastguard Worker  * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
20*de1e4e89SAndroid Build Coastguard Worker  * @l2tp_family:  address family number AF_L2TPIP.
21*de1e4e89SAndroid Build Coastguard Worker  * @l2tp_addr:    protocol specific address information
22*de1e4e89SAndroid Build Coastguard Worker  * @l2tp_conn_id: connection id of tunnel
23*de1e4e89SAndroid Build Coastguard Worker  */
24*de1e4e89SAndroid Build Coastguard Worker #define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
25*de1e4e89SAndroid Build Coastguard Worker struct sockaddr_l2tpip {
26*de1e4e89SAndroid Build Coastguard Worker 	/* The first fields must match struct sockaddr_in */
27*de1e4e89SAndroid Build Coastguard Worker 	__kernel_sa_family_t l2tp_family; /* AF_INET */
28*de1e4e89SAndroid Build Coastguard Worker 	__be16		l2tp_unused;	/* INET port number (unused) */
29*de1e4e89SAndroid Build Coastguard Worker 	struct in_addr	l2tp_addr;	/* Internet address */
30*de1e4e89SAndroid Build Coastguard Worker 
31*de1e4e89SAndroid Build Coastguard Worker 	__u32		l2tp_conn_id;	/* Connection ID of tunnel */
32*de1e4e89SAndroid Build Coastguard Worker 
33*de1e4e89SAndroid Build Coastguard Worker 	/* Pad to size of `struct sockaddr'. */
34*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	__pad[__SOCK_SIZE__ -
35*de1e4e89SAndroid Build Coastguard Worker 			      sizeof(__kernel_sa_family_t) -
36*de1e4e89SAndroid Build Coastguard Worker 			      sizeof(__be16) - sizeof(struct in_addr) -
37*de1e4e89SAndroid Build Coastguard Worker 			      sizeof(__u32)];
38*de1e4e89SAndroid Build Coastguard Worker };
39*de1e4e89SAndroid Build Coastguard Worker 
40*de1e4e89SAndroid Build Coastguard Worker /**
41*de1e4e89SAndroid Build Coastguard Worker  * struct sockaddr_l2tpip6 - the sockaddr structure for L2TP-over-IPv6 sockets
42*de1e4e89SAndroid Build Coastguard Worker  * @l2tp_family:  address family number AF_L2TPIP.
43*de1e4e89SAndroid Build Coastguard Worker  * @l2tp_addr:    protocol specific address information
44*de1e4e89SAndroid Build Coastguard Worker  * @l2tp_conn_id: connection id of tunnel
45*de1e4e89SAndroid Build Coastguard Worker  */
46*de1e4e89SAndroid Build Coastguard Worker struct sockaddr_l2tpip6 {
47*de1e4e89SAndroid Build Coastguard Worker 	/* The first fields must match struct sockaddr_in6 */
48*de1e4e89SAndroid Build Coastguard Worker 	__kernel_sa_family_t l2tp_family; /* AF_INET6 */
49*de1e4e89SAndroid Build Coastguard Worker 	__be16		l2tp_unused;	/* INET port number (unused) */
50*de1e4e89SAndroid Build Coastguard Worker 	__be32		l2tp_flowinfo;	/* IPv6 flow information */
51*de1e4e89SAndroid Build Coastguard Worker 	struct in6_addr	l2tp_addr;	/* IPv6 address */
52*de1e4e89SAndroid Build Coastguard Worker 	__u32		l2tp_scope_id;	/* scope id (new in RFC2553) */
53*de1e4e89SAndroid Build Coastguard Worker 	__u32		l2tp_conn_id;	/* Connection ID of tunnel */
54*de1e4e89SAndroid Build Coastguard Worker };
55*de1e4e89SAndroid Build Coastguard Worker 
56*de1e4e89SAndroid Build Coastguard Worker /*****************************************************************************
57*de1e4e89SAndroid Build Coastguard Worker  *  NETLINK_GENERIC netlink family.
58*de1e4e89SAndroid Build Coastguard Worker  *****************************************************************************/
59*de1e4e89SAndroid Build Coastguard Worker 
60*de1e4e89SAndroid Build Coastguard Worker /*
61*de1e4e89SAndroid Build Coastguard Worker  * Commands.
62*de1e4e89SAndroid Build Coastguard Worker  * Valid TLVs of each command are:-
63*de1e4e89SAndroid Build Coastguard Worker  * TUNNEL_CREATE	- CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid
64*de1e4e89SAndroid Build Coastguard Worker  * TUNNEL_DELETE	- CONN_ID
65*de1e4e89SAndroid Build Coastguard Worker  * TUNNEL_MODIFY	- CONN_ID, udpcsum
66*de1e4e89SAndroid Build Coastguard Worker  * TUNNEL_GETSTATS	- CONN_ID, (stats)
67*de1e4e89SAndroid Build Coastguard Worker  * TUNNEL_GET		- CONN_ID, (...)
68*de1e4e89SAndroid Build Coastguard Worker  * SESSION_CREATE	- SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec
69*de1e4e89SAndroid Build Coastguard Worker  * SESSION_DELETE	- SESSION_ID
70*de1e4e89SAndroid Build Coastguard Worker  * SESSION_MODIFY	- SESSION_ID, data_seq
71*de1e4e89SAndroid Build Coastguard Worker  * SESSION_GET		- SESSION_ID, (...)
72*de1e4e89SAndroid Build Coastguard Worker  * SESSION_GETSTATS	- SESSION_ID, (stats)
73*de1e4e89SAndroid Build Coastguard Worker  *
74*de1e4e89SAndroid Build Coastguard Worker  */
75*de1e4e89SAndroid Build Coastguard Worker enum {
76*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_NOOP,
77*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_TUNNEL_CREATE,
78*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_TUNNEL_DELETE,
79*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_TUNNEL_MODIFY,
80*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_TUNNEL_GET,
81*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_SESSION_CREATE,
82*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_SESSION_DELETE,
83*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_SESSION_MODIFY,
84*de1e4e89SAndroid Build Coastguard Worker 	L2TP_CMD_SESSION_GET,
85*de1e4e89SAndroid Build Coastguard Worker 	__L2TP_CMD_MAX,
86*de1e4e89SAndroid Build Coastguard Worker };
87*de1e4e89SAndroid Build Coastguard Worker 
88*de1e4e89SAndroid Build Coastguard Worker #define L2TP_CMD_MAX			(__L2TP_CMD_MAX - 1)
89*de1e4e89SAndroid Build Coastguard Worker 
90*de1e4e89SAndroid Build Coastguard Worker /*
91*de1e4e89SAndroid Build Coastguard Worker  * ATTR types defined for L2TP
92*de1e4e89SAndroid Build Coastguard Worker  */
93*de1e4e89SAndroid Build Coastguard Worker enum {
94*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_NONE,			/* no data */
95*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_PW_TYPE,		/* u16, enum l2tp_pwtype */
96*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_ENCAP_TYPE,		/* u16, enum l2tp_encap_type */
97*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_OFFSET,		/* u16 */
98*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_DATA_SEQ,		/* u16 */
99*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_L2SPEC_TYPE,		/* u8, enum l2tp_l2spec_type */
100*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_L2SPEC_LEN,		/* u8, enum l2tp_l2spec_type */
101*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_PROTO_VERSION,	/* u8 */
102*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_IFNAME,		/* string */
103*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_CONN_ID,		/* u32 */
104*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_PEER_CONN_ID,		/* u32 */
105*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_SESSION_ID,		/* u32 */
106*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_PEER_SESSION_ID,	/* u32 */
107*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_UDP_CSUM,		/* u8 */
108*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_VLAN_ID,		/* u16 */
109*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_COOKIE,		/* 0, 4 or 8 bytes */
110*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_PEER_COOKIE,		/* 0, 4 or 8 bytes */
111*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_DEBUG,		/* u32, enum l2tp_debug_flags */
112*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RECV_SEQ,		/* u8 */
113*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_SEND_SEQ,		/* u8 */
114*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_LNS_MODE,		/* u8 */
115*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_USING_IPSEC,		/* u8 */
116*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RECV_TIMEOUT,		/* msec */
117*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_FD,			/* int */
118*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_IP_SADDR,		/* u32 */
119*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_IP_DADDR,		/* u32 */
120*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_UDP_SPORT,		/* u16 */
121*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_UDP_DPORT,		/* u16 */
122*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_MTU,			/* u16 */
123*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_MRU,			/* u16 */
124*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_STATS,		/* nested */
125*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_IP6_SADDR,		/* struct in6_addr */
126*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_IP6_DADDR,		/* struct in6_addr */
127*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_UDP_ZERO_CSUM6_TX,	/* flag */
128*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_UDP_ZERO_CSUM6_RX,	/* flag */
129*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_PAD,
130*de1e4e89SAndroid Build Coastguard Worker 	__L2TP_ATTR_MAX,
131*de1e4e89SAndroid Build Coastguard Worker };
132*de1e4e89SAndroid Build Coastguard Worker 
133*de1e4e89SAndroid Build Coastguard Worker #define L2TP_ATTR_MAX			(__L2TP_ATTR_MAX - 1)
134*de1e4e89SAndroid Build Coastguard Worker 
135*de1e4e89SAndroid Build Coastguard Worker /* Nested in L2TP_ATTR_STATS */
136*de1e4e89SAndroid Build Coastguard Worker enum {
137*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_STATS_NONE,		/* no data */
138*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_TX_PACKETS,		/* u64 */
139*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_TX_BYTES,		/* u64 */
140*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_TX_ERRORS,		/* u64 */
141*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RX_PACKETS,		/* u64 */
142*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RX_BYTES,		/* u64 */
143*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RX_SEQ_DISCARDS,	/* u64 */
144*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RX_OOS_PACKETS,	/* u64 */
145*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_RX_ERRORS,		/* u64 */
146*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ATTR_STATS_PAD,
147*de1e4e89SAndroid Build Coastguard Worker 	__L2TP_ATTR_STATS_MAX,
148*de1e4e89SAndroid Build Coastguard Worker };
149*de1e4e89SAndroid Build Coastguard Worker 
150*de1e4e89SAndroid Build Coastguard Worker #define L2TP_ATTR_STATS_MAX		(__L2TP_ATTR_STATS_MAX - 1)
151*de1e4e89SAndroid Build Coastguard Worker 
152*de1e4e89SAndroid Build Coastguard Worker enum l2tp_pwtype {
153*de1e4e89SAndroid Build Coastguard Worker 	L2TP_PWTYPE_NONE = 0x0000,
154*de1e4e89SAndroid Build Coastguard Worker 	L2TP_PWTYPE_ETH_VLAN = 0x0004,
155*de1e4e89SAndroid Build Coastguard Worker 	L2TP_PWTYPE_ETH = 0x0005,
156*de1e4e89SAndroid Build Coastguard Worker 	L2TP_PWTYPE_PPP = 0x0007,
157*de1e4e89SAndroid Build Coastguard Worker 	L2TP_PWTYPE_PPP_AC = 0x0008,
158*de1e4e89SAndroid Build Coastguard Worker 	L2TP_PWTYPE_IP = 0x000b,
159*de1e4e89SAndroid Build Coastguard Worker 	__L2TP_PWTYPE_MAX
160*de1e4e89SAndroid Build Coastguard Worker };
161*de1e4e89SAndroid Build Coastguard Worker 
162*de1e4e89SAndroid Build Coastguard Worker enum l2tp_l2spec_type {
163*de1e4e89SAndroid Build Coastguard Worker 	L2TP_L2SPECTYPE_NONE,
164*de1e4e89SAndroid Build Coastguard Worker 	L2TP_L2SPECTYPE_DEFAULT,
165*de1e4e89SAndroid Build Coastguard Worker };
166*de1e4e89SAndroid Build Coastguard Worker 
167*de1e4e89SAndroid Build Coastguard Worker enum l2tp_encap_type {
168*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ENCAPTYPE_UDP,
169*de1e4e89SAndroid Build Coastguard Worker 	L2TP_ENCAPTYPE_IP,
170*de1e4e89SAndroid Build Coastguard Worker };
171*de1e4e89SAndroid Build Coastguard Worker 
172*de1e4e89SAndroid Build Coastguard Worker enum l2tp_seqmode {
173*de1e4e89SAndroid Build Coastguard Worker 	L2TP_SEQ_NONE = 0,
174*de1e4e89SAndroid Build Coastguard Worker 	L2TP_SEQ_IP = 1,
175*de1e4e89SAndroid Build Coastguard Worker 	L2TP_SEQ_ALL = 2,
176*de1e4e89SAndroid Build Coastguard Worker };
177*de1e4e89SAndroid Build Coastguard Worker 
178*de1e4e89SAndroid Build Coastguard Worker /**
179*de1e4e89SAndroid Build Coastguard Worker  * enum l2tp_debug_flags - debug message categories for L2TP tunnels/sessions
180*de1e4e89SAndroid Build Coastguard Worker  *
181*de1e4e89SAndroid Build Coastguard Worker  * @L2TP_MSG_DEBUG: verbose debug (if compiled in)
182*de1e4e89SAndroid Build Coastguard Worker  * @L2TP_MSG_CONTROL: userspace - kernel interface
183*de1e4e89SAndroid Build Coastguard Worker  * @L2TP_MSG_SEQ: sequence numbers
184*de1e4e89SAndroid Build Coastguard Worker  * @L2TP_MSG_DATA: data packets
185*de1e4e89SAndroid Build Coastguard Worker  */
186*de1e4e89SAndroid Build Coastguard Worker enum l2tp_debug_flags {
187*de1e4e89SAndroid Build Coastguard Worker 	L2TP_MSG_DEBUG		= (1 << 0),
188*de1e4e89SAndroid Build Coastguard Worker 	L2TP_MSG_CONTROL	= (1 << 1),
189*de1e4e89SAndroid Build Coastguard Worker 	L2TP_MSG_SEQ		= (1 << 2),
190*de1e4e89SAndroid Build Coastguard Worker 	L2TP_MSG_DATA		= (1 << 3),
191*de1e4e89SAndroid Build Coastguard Worker };
192*de1e4e89SAndroid Build Coastguard Worker 
193*de1e4e89SAndroid Build Coastguard Worker /*
194*de1e4e89SAndroid Build Coastguard Worker  * NETLINK_GENERIC related info
195*de1e4e89SAndroid Build Coastguard Worker  */
196*de1e4e89SAndroid Build Coastguard Worker #define L2TP_GENL_NAME		"l2tp"
197*de1e4e89SAndroid Build Coastguard Worker #define L2TP_GENL_VERSION	0x1
198*de1e4e89SAndroid Build Coastguard Worker #define L2TP_GENL_MCGROUP       "l2tp"
199*de1e4e89SAndroid Build Coastguard Worker 
200*de1e4e89SAndroid Build Coastguard Worker #endif /* _LINUX_L2TP_H_ */
201