cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

l2tp.h (5788B)


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