brintos

brintos / linux-shallow public Read only

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