Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * L2TP-over-IP socket for L2TPv3.
0004  *
0005  * Author: James Chapman <jchapman@katalix.com>
0006  */
0007 
0008 #ifndef _UAPI_LINUX_L2TP_H_
0009 #define _UAPI_LINUX_L2TP_H_
0010 
0011 #include <linux/types.h>
0012 #include <linux/socket.h>
0013 #include <linux/in.h>
0014 #include <linux/in6.h>
0015 
0016 #define IPPROTO_L2TP        115
0017 
0018 /**
0019  * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
0020  * @l2tp_family:  address family number AF_L2TPIP.
0021  * @l2tp_addr:    protocol specific address information
0022  * @l2tp_conn_id: connection id of tunnel
0023  */
0024 #define __SOCK_SIZE__   16      /* sizeof(struct sockaddr)  */
0025 struct sockaddr_l2tpip {
0026     /* The first fields must match struct sockaddr_in */
0027     __kernel_sa_family_t l2tp_family; /* AF_INET */
0028     __be16      l2tp_unused;    /* INET port number (unused) */
0029     struct in_addr  l2tp_addr;  /* Internet address */
0030 
0031     __u32       l2tp_conn_id;   /* Connection ID of tunnel */
0032 
0033     /* Pad to size of `struct sockaddr'. */
0034     unsigned char   __pad[__SOCK_SIZE__ -
0035                   sizeof(__kernel_sa_family_t) -
0036                   sizeof(__be16) - sizeof(struct in_addr) -
0037                   sizeof(__u32)];
0038 };
0039 
0040 /**
0041  * struct sockaddr_l2tpip6 - the sockaddr structure for L2TP-over-IPv6 sockets
0042  * @l2tp_family:  address family number AF_L2TPIP.
0043  * @l2tp_addr:    protocol specific address information
0044  * @l2tp_conn_id: connection id of tunnel
0045  */
0046 struct sockaddr_l2tpip6 {
0047     /* The first fields must match struct sockaddr_in6 */
0048     __kernel_sa_family_t l2tp_family; /* AF_INET6 */
0049     __be16      l2tp_unused;    /* INET port number (unused) */
0050     __be32      l2tp_flowinfo;  /* IPv6 flow information */
0051     struct in6_addr l2tp_addr;  /* IPv6 address */
0052     __u32       l2tp_scope_id;  /* scope id (new in RFC2553) */
0053     __u32       l2tp_conn_id;   /* Connection ID of tunnel */
0054 };
0055 
0056 /*****************************************************************************
0057  *  NETLINK_GENERIC netlink family.
0058  *****************************************************************************/
0059 
0060 /*
0061  * Commands.
0062  * Valid TLVs of each command are:-
0063  * TUNNEL_CREATE    - CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum
0064  * TUNNEL_DELETE    - CONN_ID
0065  * TUNNEL_MODIFY    - CONN_ID, udpcsum
0066  * TUNNEL_GETSTATS  - CONN_ID, (stats)
0067  * TUNNEL_GET       - CONN_ID, (...)
0068  * SESSION_CREATE   - SESSION_ID, PW_TYPE, cookie, peer_cookie, l2spec
0069  * SESSION_DELETE   - SESSION_ID
0070  * SESSION_MODIFY   - SESSION_ID
0071  * SESSION_GET      - SESSION_ID, (...)
0072  * SESSION_GETSTATS - SESSION_ID, (stats)
0073  *
0074  */
0075 enum {
0076     L2TP_CMD_NOOP,
0077     L2TP_CMD_TUNNEL_CREATE,
0078     L2TP_CMD_TUNNEL_DELETE,
0079     L2TP_CMD_TUNNEL_MODIFY,
0080     L2TP_CMD_TUNNEL_GET,
0081     L2TP_CMD_SESSION_CREATE,
0082     L2TP_CMD_SESSION_DELETE,
0083     L2TP_CMD_SESSION_MODIFY,
0084     L2TP_CMD_SESSION_GET,
0085     __L2TP_CMD_MAX,
0086 };
0087 
0088 #define L2TP_CMD_MAX            (__L2TP_CMD_MAX - 1)
0089 
0090 /*
0091  * ATTR types defined for L2TP
0092  */
0093 enum {
0094     L2TP_ATTR_NONE,         /* no data */
0095     L2TP_ATTR_PW_TYPE,      /* u16, enum l2tp_pwtype */
0096     L2TP_ATTR_ENCAP_TYPE,       /* u16, enum l2tp_encap_type */
0097     L2TP_ATTR_OFFSET,       /* u16 (not used) */
0098     L2TP_ATTR_DATA_SEQ,     /* u16 (not used) */
0099     L2TP_ATTR_L2SPEC_TYPE,      /* u8, enum l2tp_l2spec_type */
0100     L2TP_ATTR_L2SPEC_LEN,       /* u8 (not used) */
0101     L2TP_ATTR_PROTO_VERSION,    /* u8 */
0102     L2TP_ATTR_IFNAME,       /* string */
0103     L2TP_ATTR_CONN_ID,      /* u32 */
0104     L2TP_ATTR_PEER_CONN_ID,     /* u32 */
0105     L2TP_ATTR_SESSION_ID,       /* u32 */
0106     L2TP_ATTR_PEER_SESSION_ID,  /* u32 */
0107     L2TP_ATTR_UDP_CSUM,     /* u8 */
0108     L2TP_ATTR_VLAN_ID,      /* u16 (not used) */
0109     L2TP_ATTR_COOKIE,       /* 0, 4 or 8 bytes */
0110     L2TP_ATTR_PEER_COOKIE,      /* 0, 4 or 8 bytes */
0111     L2TP_ATTR_DEBUG,        /* u32, enum l2tp_debug_flags (not used) */
0112     L2TP_ATTR_RECV_SEQ,     /* u8 */
0113     L2TP_ATTR_SEND_SEQ,     /* u8 */
0114     L2TP_ATTR_LNS_MODE,     /* u8 */
0115     L2TP_ATTR_USING_IPSEC,      /* u8 */
0116     L2TP_ATTR_RECV_TIMEOUT,     /* msec */
0117     L2TP_ATTR_FD,           /* int */
0118     L2TP_ATTR_IP_SADDR,     /* u32 */
0119     L2TP_ATTR_IP_DADDR,     /* u32 */
0120     L2TP_ATTR_UDP_SPORT,        /* u16 */
0121     L2TP_ATTR_UDP_DPORT,        /* u16 */
0122     L2TP_ATTR_MTU,          /* u16 (not used) */
0123     L2TP_ATTR_MRU,          /* u16 (not used) */
0124     L2TP_ATTR_STATS,        /* nested */
0125     L2TP_ATTR_IP6_SADDR,        /* struct in6_addr */
0126     L2TP_ATTR_IP6_DADDR,        /* struct in6_addr */
0127     L2TP_ATTR_UDP_ZERO_CSUM6_TX,    /* flag */
0128     L2TP_ATTR_UDP_ZERO_CSUM6_RX,    /* flag */
0129     L2TP_ATTR_PAD,
0130     __L2TP_ATTR_MAX,
0131 };
0132 
0133 #define L2TP_ATTR_MAX           (__L2TP_ATTR_MAX - 1)
0134 
0135 /* Nested in L2TP_ATTR_STATS */
0136 enum {
0137     L2TP_ATTR_STATS_NONE,       /* no data */
0138     L2TP_ATTR_TX_PACKETS,       /* u64 */
0139     L2TP_ATTR_TX_BYTES,     /* u64 */
0140     L2TP_ATTR_TX_ERRORS,        /* u64 */
0141     L2TP_ATTR_RX_PACKETS,       /* u64 */
0142     L2TP_ATTR_RX_BYTES,     /* u64 */
0143     L2TP_ATTR_RX_SEQ_DISCARDS,  /* u64 */
0144     L2TP_ATTR_RX_OOS_PACKETS,   /* u64 */
0145     L2TP_ATTR_RX_ERRORS,        /* u64 */
0146     L2TP_ATTR_STATS_PAD,
0147     L2TP_ATTR_RX_COOKIE_DISCARDS,   /* u64 */
0148     L2TP_ATTR_RX_INVALID,       /* u64 */
0149     __L2TP_ATTR_STATS_MAX,
0150 };
0151 
0152 #define L2TP_ATTR_STATS_MAX     (__L2TP_ATTR_STATS_MAX - 1)
0153 
0154 enum l2tp_pwtype {
0155     L2TP_PWTYPE_NONE = 0x0000,
0156     L2TP_PWTYPE_ETH_VLAN = 0x0004,
0157     L2TP_PWTYPE_ETH = 0x0005,
0158     L2TP_PWTYPE_PPP = 0x0007,
0159     L2TP_PWTYPE_PPP_AC = 0x0008,
0160     L2TP_PWTYPE_IP = 0x000b,
0161     __L2TP_PWTYPE_MAX
0162 };
0163 
0164 enum l2tp_l2spec_type {
0165     L2TP_L2SPECTYPE_NONE,
0166     L2TP_L2SPECTYPE_DEFAULT,
0167 };
0168 
0169 enum l2tp_encap_type {
0170     L2TP_ENCAPTYPE_UDP,
0171     L2TP_ENCAPTYPE_IP,
0172 };
0173 
0174 /* For L2TP_ATTR_DATA_SEQ. Unused. */
0175 enum l2tp_seqmode {
0176     L2TP_SEQ_NONE = 0,
0177     L2TP_SEQ_IP = 1,
0178     L2TP_SEQ_ALL = 2,
0179 };
0180 
0181 /**
0182  * enum l2tp_debug_flags - debug message categories for L2TP tunnels/sessions.
0183  *
0184  * Unused.
0185  *
0186  * @L2TP_MSG_DEBUG: verbose debug (if compiled in)
0187  * @L2TP_MSG_CONTROL: userspace - kernel interface
0188  * @L2TP_MSG_SEQ: sequence numbers
0189  * @L2TP_MSG_DATA: data packets
0190  */
0191 enum l2tp_debug_flags {
0192     L2TP_MSG_DEBUG      = (1 << 0),
0193     L2TP_MSG_CONTROL    = (1 << 1),
0194     L2TP_MSG_SEQ        = (1 << 2),
0195     L2TP_MSG_DATA       = (1 << 3),
0196 };
0197 
0198 /*
0199  * NETLINK_GENERIC related info
0200  */
0201 #define L2TP_GENL_NAME      "l2tp"
0202 #define L2TP_GENL_VERSION   0x1
0203 #define L2TP_GENL_MCGROUP       "l2tp"
0204 
0205 #endif /* _UAPI_LINUX_L2TP_H_ */