Blame view

include/linux/l2tp.h 4.16 KB
0d76751fa   James Chapman   l2tp: Add L2TPv3 ...
1
2
3
4
5
6
7
8
9
10
11
12
13
  /*
   * L2TP-over-IP socket for L2TPv3.
   *
   * Author: James Chapman <jchapman@katalix.com>
   */
  
  #ifndef _LINUX_L2TP_H_
  #define _LINUX_L2TP_H_
  
  #include <linux/types.h>
  #ifdef __KERNEL__
  #include <linux/socket.h>
  #include <linux/in.h>
309795f4b   James Chapman   l2tp: Add netlink...
14
15
  #else
  #include <netinet/in.h>
0d76751fa   James Chapman   l2tp: Add L2TPv3 ...
16
17
18
19
20
21
22
23
24
25
  #endif
  
  #define IPPROTO_L2TP		115
  
  /**
   * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
   * @l2tp_family:  address family number AF_L2TPIP.
   * @l2tp_addr:    protocol specific address information
   * @l2tp_conn_id: connection id of tunnel
   */
309795f4b   James Chapman   l2tp: Add netlink...
26
  #define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
0d76751fa   James Chapman   l2tp: Add L2TPv3 ...
27
28
29
30
31
32
33
34
35
36
37
38
39
  struct sockaddr_l2tpip {
  	/* The first fields must match struct sockaddr_in */
  	sa_family_t	l2tp_family;	/* AF_INET */
  	__be16		l2tp_unused;	/* INET port number (unused) */
  	struct in_addr	l2tp_addr;	/* Internet address */
  
  	__u32		l2tp_conn_id;	/* Connection ID of tunnel */
  
  	/* Pad to size of `struct sockaddr'. */
  	unsigned char	__pad[sizeof(struct sockaddr) - sizeof(sa_family_t) -
  			      sizeof(__be16) - sizeof(struct in_addr) -
  			      sizeof(__u32)];
  };
309795f4b   James Chapman   l2tp: Add netlink...
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
  /*****************************************************************************
   *  NETLINK_GENERIC netlink family.
   *****************************************************************************/
  
  /*
   * Commands.
   * Valid TLVs of each command are:-
   * TUNNEL_CREATE	- CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid
   * TUNNEL_DELETE	- CONN_ID
   * TUNNEL_MODIFY	- CONN_ID, udpcsum
   * TUNNEL_GETSTATS	- CONN_ID, (stats)
   * TUNNEL_GET		- CONN_ID, (...)
   * SESSION_CREATE	- SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec
   * SESSION_DELETE	- SESSION_ID
   * SESSION_MODIFY	- SESSION_ID, data_seq
   * SESSION_GET		- SESSION_ID, (...)
   * SESSION_GETSTATS	- SESSION_ID, (stats)
   *
   */
  enum {
  	L2TP_CMD_NOOP,
  	L2TP_CMD_TUNNEL_CREATE,
  	L2TP_CMD_TUNNEL_DELETE,
  	L2TP_CMD_TUNNEL_MODIFY,
  	L2TP_CMD_TUNNEL_GET,
  	L2TP_CMD_SESSION_CREATE,
  	L2TP_CMD_SESSION_DELETE,
  	L2TP_CMD_SESSION_MODIFY,
  	L2TP_CMD_SESSION_GET,
  	__L2TP_CMD_MAX,
  };
  
  #define L2TP_CMD_MAX			(__L2TP_CMD_MAX - 1)
  
  /*
   * ATTR types defined for L2TP
   */
  enum {
  	L2TP_ATTR_NONE,			/* no data */
  	L2TP_ATTR_PW_TYPE,		/* u16, enum l2tp_pwtype */
  	L2TP_ATTR_ENCAP_TYPE,		/* u16, enum l2tp_encap_type */
  	L2TP_ATTR_OFFSET,		/* u16 */
  	L2TP_ATTR_DATA_SEQ,		/* u16 */
  	L2TP_ATTR_L2SPEC_TYPE,		/* u8, enum l2tp_l2spec_type */
  	L2TP_ATTR_L2SPEC_LEN,		/* u8, enum l2tp_l2spec_type */
  	L2TP_ATTR_PROTO_VERSION,	/* u8 */
  	L2TP_ATTR_IFNAME,		/* string */
  	L2TP_ATTR_CONN_ID,		/* u32 */
  	L2TP_ATTR_PEER_CONN_ID,		/* u32 */
  	L2TP_ATTR_SESSION_ID,		/* u32 */
  	L2TP_ATTR_PEER_SESSION_ID,	/* u32 */
  	L2TP_ATTR_UDP_CSUM,		/* u8 */
  	L2TP_ATTR_VLAN_ID,		/* u16 */
  	L2TP_ATTR_COOKIE,		/* 0, 4 or 8 bytes */
  	L2TP_ATTR_PEER_COOKIE,		/* 0, 4 or 8 bytes */
  	L2TP_ATTR_DEBUG,		/* u32 */
  	L2TP_ATTR_RECV_SEQ,		/* u8 */
  	L2TP_ATTR_SEND_SEQ,		/* u8 */
  	L2TP_ATTR_LNS_MODE,		/* u8 */
  	L2TP_ATTR_USING_IPSEC,		/* u8 */
  	L2TP_ATTR_RECV_TIMEOUT,		/* msec */
  	L2TP_ATTR_FD,			/* int */
  	L2TP_ATTR_IP_SADDR,		/* u32 */
  	L2TP_ATTR_IP_DADDR,		/* u32 */
  	L2TP_ATTR_UDP_SPORT,		/* u16 */
  	L2TP_ATTR_UDP_DPORT,		/* u16 */
  	L2TP_ATTR_MTU,			/* u16 */
  	L2TP_ATTR_MRU,			/* u16 */
  	L2TP_ATTR_STATS,		/* nested */
  	__L2TP_ATTR_MAX,
  };
  
  #define L2TP_ATTR_MAX			(__L2TP_ATTR_MAX - 1)
  
  /* Nested in L2TP_ATTR_STATS */
  enum {
  	L2TP_ATTR_STATS_NONE,		/* no data */
  	L2TP_ATTR_TX_PACKETS,		/* u64 */
  	L2TP_ATTR_TX_BYTES,		/* u64 */
  	L2TP_ATTR_TX_ERRORS,		/* u64 */
  	L2TP_ATTR_RX_PACKETS,		/* u64 */
  	L2TP_ATTR_RX_BYTES,		/* u64 */
  	L2TP_ATTR_RX_SEQ_DISCARDS,	/* u64 */
  	L2TP_ATTR_RX_OOS_PACKETS,	/* u64 */
  	L2TP_ATTR_RX_ERRORS,		/* u64 */
  	__L2TP_ATTR_STATS_MAX,
  };
  
  #define L2TP_ATTR_STATS_MAX		(__L2TP_ATTR_STATS_MAX - 1)
  
  enum l2tp_pwtype {
  	L2TP_PWTYPE_NONE = 0x0000,
  	L2TP_PWTYPE_ETH_VLAN = 0x0004,
  	L2TP_PWTYPE_ETH = 0x0005,
  	L2TP_PWTYPE_PPP = 0x0007,
  	L2TP_PWTYPE_PPP_AC = 0x0008,
  	L2TP_PWTYPE_IP = 0x000b,
  	__L2TP_PWTYPE_MAX
  };
  
  enum l2tp_l2spec_type {
  	L2TP_L2SPECTYPE_NONE,
  	L2TP_L2SPECTYPE_DEFAULT,
  };
  
  enum l2tp_encap_type {
  	L2TP_ENCAPTYPE_UDP,
  	L2TP_ENCAPTYPE_IP,
  };
  
  enum l2tp_seqmode {
  	L2TP_SEQ_NONE = 0,
  	L2TP_SEQ_IP = 1,
  	L2TP_SEQ_ALL = 2,
  };
  
  /*
   * NETLINK_GENERIC related info
   */
  #define L2TP_GENL_NAME		"l2tp"
  #define L2TP_GENL_VERSION	0x1
0d76751fa   James Chapman   l2tp: Add L2TPv3 ...
161
  #endif