linux-headers (unknown)

(root)/
include/
linux/
l2tp.h
       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 _LINUX_L2TP_H_
       9  #define _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 sockets
      18   * @l2tp_family:  address family number AF_L2TPIP.
      19   * @l2tp_addr:    protocol specific address information
      20   * @l2tp_conn_id: connection id of tunnel
      21   */
      22  #define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
      23  struct 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 sockets
      40   * @l2tp_family:  address family number AF_L2TPIP.
      41   * @l2tp_addr:    protocol specific address information
      42   * @l2tp_conn_id: connection id of tunnel
      43   */
      44  struct 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, udpcsum
      62   * TUNNEL_DELETE	- CONN_ID
      63   * TUNNEL_MODIFY	- CONN_ID, udpcsum
      64   * TUNNEL_GETSTATS	- CONN_ID, (stats)
      65   * TUNNEL_GET		- CONN_ID, (...)
      66   * SESSION_CREATE	- SESSION_ID, PW_TYPE, cookie, peer_cookie, l2spec
      67   * SESSION_DELETE	- SESSION_ID
      68   * SESSION_MODIFY	- SESSION_ID
      69   * SESSION_GET		- SESSION_ID, (...)
      70   * SESSION_GETSTATS	- SESSION_ID, (stats)
      71   *
      72   */
      73  enum {
      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 L2TP
      90   */
      91  enum {
      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 */
     134  enum {
     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  
     152  enum 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_MAX
     160  };
     161  
     162  enum l2tp_l2spec_type {
     163  	L2TP_L2SPECTYPE_NONE,
     164  	L2TP_L2SPECTYPE_DEFAULT,
     165  };
     166  
     167  enum l2tp_encap_type {
     168  	L2TP_ENCAPTYPE_UDP,
     169  	L2TP_ENCAPTYPE_IP,
     170  };
     171  
     172  /* For L2TP_ATTR_DATA_SEQ. Unused. */
     173  enum 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 interface
     186   * @L2TP_MSG_SEQ: sequence numbers
     187   * @L2TP_MSG_DATA: data packets
     188   */
     189  enum 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 info
     198   */
     199  #define L2TP_GENL_NAME		"l2tp"
     200  #define L2TP_GENL_VERSION	0x1
     201  #define L2TP_GENL_MCGROUP       "l2tp"
     202  
     203  #endif /* _LINUX_L2TP_H_ */