linux/include/uapi/linux/l2tp.h
<<
>>
Prefs
   1/*
   2 * L2TP-over-IP socket for L2TPv3.
   3 *
   4 * Author: James Chapman <jchapman@katalix.com>
   5 */
   6
   7#ifndef _UAPI_LINUX_L2TP_H_
   8#define _UAPI_LINUX_L2TP_H_
   9
  10#include <linux/types.h>
  11#include <linux/socket.h>
  12#ifndef __KERNEL__
  13#include <netinet/in.h>
  14#endif
  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[sizeof(struct sockaddr) -
  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, vlanid
  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, offset, data_seq, cookie, peer_cookie, offset, l2spec
  69 * SESSION_DELETE       - SESSION_ID
  70 * SESSION_MODIFY       - SESSION_ID, data_seq
  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 */
  98        L2TP_ATTR_DATA_SEQ,             /* u16 */
  99        L2TP_ATTR_L2SPEC_TYPE,          /* u8, enum l2tp_l2spec_type */
 100        L2TP_ATTR_L2SPEC_LEN,           /* u8, enum l2tp_l2spec_type */
 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 */
 109        L2TP_ATTR_COOKIE,               /* 0, 4 or 8 bytes */
 110        L2TP_ATTR_PEER_COOKIE,          /* 0, 4 or 8 bytes */
 111        L2TP_ATTR_DEBUG,                /* u32 */
 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 */
 123        L2TP_ATTR_MRU,                  /* u16 */
 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,    /* u8 */
 128        L2TP_ATTR_UDP_ZERO_CSUM6_RX,    /* u8 */
 129        __L2TP_ATTR_MAX,
 130};
 131
 132#define L2TP_ATTR_MAX                   (__L2TP_ATTR_MAX - 1)
 133
 134/* Nested in L2TP_ATTR_STATS */
 135enum {
 136        L2TP_ATTR_STATS_NONE,           /* no data */
 137        L2TP_ATTR_TX_PACKETS,           /* u64 */
 138        L2TP_ATTR_TX_BYTES,             /* u64 */
 139        L2TP_ATTR_TX_ERRORS,            /* u64 */
 140        L2TP_ATTR_RX_PACKETS,           /* u64 */
 141        L2TP_ATTR_RX_BYTES,             /* u64 */
 142        L2TP_ATTR_RX_SEQ_DISCARDS,      /* u64 */
 143        L2TP_ATTR_RX_OOS_PACKETS,       /* u64 */
 144        L2TP_ATTR_RX_ERRORS,            /* u64 */
 145        __L2TP_ATTR_STATS_MAX,
 146};
 147
 148#define L2TP_ATTR_STATS_MAX             (__L2TP_ATTR_STATS_MAX - 1)
 149
 150enum l2tp_pwtype {
 151        L2TP_PWTYPE_NONE = 0x0000,
 152        L2TP_PWTYPE_ETH_VLAN = 0x0004,
 153        L2TP_PWTYPE_ETH = 0x0005,
 154        L2TP_PWTYPE_PPP = 0x0007,
 155        L2TP_PWTYPE_PPP_AC = 0x0008,
 156        L2TP_PWTYPE_IP = 0x000b,
 157        __L2TP_PWTYPE_MAX
 158};
 159
 160enum l2tp_l2spec_type {
 161        L2TP_L2SPECTYPE_NONE,
 162        L2TP_L2SPECTYPE_DEFAULT,
 163};
 164
 165enum l2tp_encap_type {
 166        L2TP_ENCAPTYPE_UDP,
 167        L2TP_ENCAPTYPE_IP,
 168};
 169
 170enum l2tp_seqmode {
 171        L2TP_SEQ_NONE = 0,
 172        L2TP_SEQ_IP = 1,
 173        L2TP_SEQ_ALL = 2,
 174};
 175
 176/*
 177 * NETLINK_GENERIC related info
 178 */
 179#define L2TP_GENL_NAME          "l2tp"
 180#define L2TP_GENL_VERSION       0x1
 181#define L2TP_GENL_MCGROUP       "l2tp"
 182
 183#endif /* _UAPI_LINUX_L2TP_H_ */
 184