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