60 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
62 #include <linux/module.h>
63 #include <linux/string.h>
64 #include <linux/list.h>
67 #include <linux/kernel.h>
70 #include <linux/sched.h>
71 #include <linux/slab.h>
72 #include <linux/errno.h>
75 #include <linux/netdevice.h>
76 #include <linux/net.h>
81 #include <linux/udp.h>
82 #include <linux/if_pppox.h>
83 #include <linux/if_pppol2tp.h>
86 #include <linux/ppp_defs.h>
89 #include <linux/hash.h>
92 #include <linux/l2tp.h>
101 #include <asm/byteorder.h>
106 #define PPPOL2TP_DRV_VERSION "V2.0"
109 #define PPPOL2TP_HEADER_OVERHEAD 40
115 #define PPPOL2TP_L2TP_HDR_SIZE_SEQ 10
116 #define PPPOL2TP_L2TP_HDR_SIZE_NOSEQ 6
135 .start_xmit = pppol2tp_xmit,
138 static const struct proto_ops pppol2tp_ops;
151 if (session ==
NULL) {
166 static int pppol2tp_recv_payload_hook(
struct sk_buff *
skb)
176 if (!pskb_may_pull(skb, 2))
179 if ((skb->
data[0] == 0xff) && (skb->
data[1] == 0x03))
193 struct sock *sk = sock->
sk;
209 else if (len < skb->len)
224 struct sock *sk =
NULL;
236 "%s: recv %d byte data frame, passing to ppp\n",
237 session->
name, data_len);
262 session->
stats.rx_errors++;
273 static void pppol2tp_session_sock_hold(
struct l2tp_session *session)
281 static void pppol2tp_session_sock_put(
struct l2tp_session *session)
297 static int pppol2tp_sendmsg(
struct kiocb *iocb,
struct socket *sock,
struct msghdr *
m,
300 static const unsigned char ppph[2] = { 0xff, 0x03 };
301 struct sock *sk = sock->
sk;
315 session = pppol2tp_sock_to_session(sk);
319 ps = l2tp_session_priv(session);
330 sizeof(ppph) + total_len,
333 goto error_put_sess_tun;
337 skb_reset_network_header(skb);
338 skb_reserve(skb,
sizeof(
struct iphdr));
339 skb_reset_transport_header(skb);
340 skb_reserve(skb, uhlen);
343 skb->
data[0] = ppph[0];
344 skb->
data[1] = ppph[1];
351 goto error_put_sess_tun;
385 static const u8 ppph[2] = { 0xff, 0x03 };
386 struct sock *sk = (
struct sock *) chan->
private;
399 session = pppol2tp_sock_to_session(sk);
403 ps = l2tp_session_priv(session);
407 tunnel = l2tp_sock_to_tunnel(sk_tun);
411 old_headroom = skb_headroom(skb);
414 sizeof(
struct iphdr) +
418 if (skb_cow_head(skb, headroom))
419 goto abort_put_sess_tun;
421 new_headroom = skb_headroom(skb);
422 skb->
truesize += new_headroom - old_headroom;
425 __skb_push(skb,
sizeof(ppph));
426 skb->
data[0] = ppph[0];
427 skb->
data[1] = ppph[1];
451 static void pppol2tp_session_close(
struct l2tp_session *session)
454 struct sock *sk = ps->
sock;
489 static void pppol2tp_session_destruct(
struct sock *sk)
509 static int pppol2tp_release(
struct socket *sock)
511 struct sock *sk = sock->
sk;
530 session = pppol2tp_sock_to_session(sk);
535 if (session !=
NULL) {
559 static struct proto pppol2tp_sk_proto = {
565 static int pppol2tp_backlog_recv(
struct sock *sk,
struct sk_buff *skb)
578 static int pppol2tp_create(
struct net *
net,
struct socket *sock)
590 sock->
ops = &pppol2tp_ops;
605 #if defined(CONFIG_L2TP_DEBUGFS) || defined(CONFIG_L2TP_DEBUGFS_MODULE)
606 static void pppol2tp_show(
struct seq_file *m,
void *
arg)
621 static int pppol2tp_connect(
struct socket *sock,
struct sockaddr *uservaddr,
622 int sockaddr_len,
int flags)
624 struct sock *sk = sock->
sk;
633 u32 tunnel_id, peer_tunnel_id;
634 u32 session_id, peer_session_id;
664 peer_tunnel_id = sp->
pppol2tp.d_tunnel;
665 session_id = sp->
pppol2tp.s_session;
666 peer_session_id = sp->
pppol2tp.d_session;
673 peer_tunnel_id = sp3->
pppol2tp.d_tunnel;
674 session_id = sp3->
pppol2tp.s_session;
675 peer_session_id = sp3->
pppol2tp.d_session;
681 peer_tunnel_id = sp6->
pppol2tp.d_tunnel;
682 session_id = sp6->
pppol2tp.s_session;
683 peer_session_id = sp6->
pppol2tp.d_session;
690 peer_tunnel_id = sp6->
pppol2tp.d_tunnel;
691 session_id = sp6->
pppol2tp.s_session;
692 peer_session_id = sp6->
pppol2tp.d_session;
709 if ((session_id == 0) && (peer_session_id == 0)) {
710 if (tunnel ==
NULL) {
715 error =
l2tp_tunnel_create(sock_net(sk), fd, ver, tunnel_id, peer_tunnel_id, &tcfg, &tunnel);
743 if (session ==
NULL) {
752 peer_session_id, &cfg);
753 if (session ==
NULL) {
758 ps = l2tp_session_priv(session);
769 ps = l2tp_session_priv(session);
776 #if defined(CONFIG_L2TP_DEBUGFS) || defined(CONFIG_L2TP_DEBUGFS_MODULE)
777 session->show = pppol2tp_show;
783 session->
ref = pppol2tp_session_sock_hold;
784 session->
deref = pppol2tp_session_sock_put;
787 dst = sk_dst_get(sk);
789 u32 pmtu = dst_mtu(__sk_dst_get(sk));
791 session->
mtu = session->
mru = pmtu -
814 po->
chan.ops = &pppol2tp_chan_ops;
834 #ifdef CONFIG_L2TP_V3
838 static int pppol2tp_session_create(
struct net *net,
u32 tunnel_id,
u32 session_id,
u32 peer_session_id,
struct l2tp_session_cfg *cfg)
872 peer_session_id, cfg);
876 ps = l2tp_session_priv(session);
890 static int pppol2tp_session_delete(
struct l2tp_session *session)
905 int *usockaddr_len,
int peer)
911 struct sock *sk = sock->
sk;
922 session = pppol2tp_sock_to_session(sk);
926 pls = l2tp_session_priv(session);
928 if (tunnel ==
NULL) {
933 inet = inet_sk(tunnel->
sock);
948 sp.
pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
950 #if IS_ENABLED(CONFIG_IPV6)
951 }
else if ((tunnel->
version == 2) &&
970 }
else if ((tunnel->
version == 3) &&
990 }
else if (tunnel->
version == 3) {
1004 sp.
pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
1008 *usockaddr_len = len;
1045 static int pppol2tp_session_ioctl(
struct l2tp_session *session,
1046 unsigned int cmd,
unsigned long arg)
1057 "%s: pppol2tp_session_ioctl(cmd=%#x, arg=%#lx)\n",
1058 session->
name, cmd, arg);
1072 ifr.ifr_mtu = session->
mtu;
1090 session->
mtu = ifr.ifr_mtu;
1117 if (
get_user(val, (
int __user *) arg))
1138 if (
get_user(val, (
int __user *) arg))
1154 pppol2tp_copy_stats(&
stats, &session->
stats);
1179 static int pppol2tp_tunnel_ioctl(
struct l2tp_tunnel *tunnel,
1180 unsigned int cmd,
unsigned long arg)
1187 "%s: pppol2tp_tunnel_ioctl(cmd=%#x, arg=%#lx)\n",
1188 tunnel->
name, cmd, arg);
1204 if (
stats.session_id != 0) {
1208 if (session !=
NULL)
1209 err = pppol2tp_session_ioctl(session, cmd, arg);
1215 stats.using_ipsec = (sk->sk_policy[0] || sk->sk_policy[1]) ? 1 : 0;
1240 static int pppol2tp_ioctl(
struct socket *sock,
unsigned int cmd,
1243 struct sock *sk = sock->
sk;
1263 session = pppol2tp_sock_to_session(sk);
1264 if (session ==
NULL)
1270 ps = l2tp_session_priv(session);
1278 err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg);
1283 err = pppol2tp_session_ioctl(session, cmd, arg);
1303 static int pppol2tp_tunnel_setsockopt(
struct sock *sk,
1305 int optname,
int val)
1326 static int pppol2tp_session_setsockopt(
struct sock *sk,
1328 int optname,
int val)
1335 if ((val != 0) && (val != 1)) {
1341 "%s: set recv_seq=%d\n",
1346 if ((val != 0) && (val != 1)) {
1352 struct sock *ssk = ps->
sock;
1358 "%s: set send_seq=%d\n",
1363 if ((val != 0) && (val != 1)) {
1369 "%s: set lns_mode=%d\n",
1382 "%s: set reorder_timeout=%d\n",
1399 static int pppol2tp_setsockopt(
struct socket *sock,
int level,
int optname,
1400 char __user *optval,
unsigned int optlen)
1402 struct sock *sk = sock->
sk;
1410 return udp_prot.setsockopt(sk, level, optname, optval, optlen);
1412 if (optlen <
sizeof(
int))
1415 if (
get_user(val, (
int __user *)optval))
1424 session = pppol2tp_sock_to_session(sk);
1425 if (session ==
NULL)
1430 ps = l2tp_session_priv(session);
1438 err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val);
1441 err = pppol2tp_session_setsockopt(sk, session, optname, val);
1453 static int pppol2tp_tunnel_getsockopt(
struct sock *sk,
1455 int optname,
int *val)
1461 *val = tunnel->
debug;
1476 static int pppol2tp_session_getsockopt(
struct sock *sk,
1478 int optname,
int *val)
1486 "%s: get recv_seq=%d\n", session->
name, *val);
1492 "%s: get send_seq=%d\n", session->
name, *val);
1498 "%s: get lns_mode=%d\n", session->
name, *val);
1502 *val = session->
debug;
1504 session->
name, *val);
1510 "%s: get reorder_timeout=%d\n", session->
name, *val);
1525 static int pppol2tp_getsockopt(
struct socket *sock,
int level,
int optname,
1526 char __user *optval,
int __user *optlen)
1528 struct sock *sk = sock->
sk;
1536 return udp_prot.getsockopt(sk, level, optname, optval, optlen);
1541 len =
min_t(
unsigned int, len,
sizeof(
int));
1552 session = pppol2tp_sock_to_session(sk);
1553 if (session ==
NULL)
1557 ps = l2tp_session_priv(session);
1565 err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val);
1568 err = pppol2tp_session_getsockopt(sk, session, optname, &val);
1591 static unsigned int pppol2tp_net_id;
1593 #ifdef CONFIG_PROC_FS
1595 struct pppol2tp_seq_data {
1603 static void pppol2tp_next_tunnel(
struct net *net,
struct pppol2tp_seq_data *pd)
1609 if (pd->tunnel ==
NULL)
1613 if (pd->tunnel->version < 3)
1618 static void pppol2tp_next_session(
struct net *net,
struct pppol2tp_seq_data *pd)
1623 if (pd->session ==
NULL) {
1624 pd->session_idx = 0;
1625 pppol2tp_next_tunnel(net, pd);
1629 static void *pppol2tp_seq_start(
struct seq_file *m, loff_t *
offs)
1640 net = seq_file_net(m);
1642 if (pd->tunnel ==
NULL)
1643 pppol2tp_next_tunnel(net, pd);
1645 pppol2tp_next_session(net, pd);
1648 if ((pd->tunnel ==
NULL) && (pd->session ==
NULL))
1655 static void *pppol2tp_seq_next(
struct seq_file *m,
void *
v, loff_t *pos)
1661 static void pppol2tp_seq_stop(
struct seq_file *
p,
void *
v)
1666 static void pppol2tp_seq_tunnel_show(
struct seq_file *m,
void *
v)
1672 (tunnel == tunnel->
sock->sk_user_data) ?
'Y' :
'N',
1674 seq_printf(m,
" %08x %llu/%llu/%llu %llu/%llu/%llu\n",
1676 (
unsigned long long)tunnel->
stats.tx_packets,
1677 (
unsigned long long)tunnel->
stats.tx_bytes,
1678 (
unsigned long long)tunnel->
stats.tx_errors,
1679 (
unsigned long long)tunnel->
stats.rx_packets,
1680 (
unsigned long long)tunnel->
stats.rx_bytes,
1681 (
unsigned long long)tunnel->
stats.rx_errors);
1684 static void pppol2tp_seq_session_show(
struct seq_file *m,
void *v)
1699 seq_printf(m,
" SESSION '%s' %08X/%d %04X/%04X -> "
1700 "%04X/%04X %d %c\n",
1701 session->
name, ip, port,
1707 (session == ps->
sock->sk_user_data) ?
1710 session->
mtu, session->
mru,
1716 seq_printf(m,
" %hu/%hu %llu/%llu/%llu %llu/%llu/%llu\n",
1717 session->
nr, session->
ns,
1718 (
unsigned long long)session->
stats.tx_packets,
1719 (
unsigned long long)session->
stats.tx_bytes,
1720 (
unsigned long long)session->
stats.tx_errors,
1721 (
unsigned long long)session->
stats.rx_packets,
1722 (
unsigned long long)session->
stats.rx_bytes,
1723 (
unsigned long long)session->
stats.rx_errors);
1729 static int pppol2tp_seq_show(
struct seq_file *m,
void *v)
1731 struct pppol2tp_seq_data *pd =
v;
1736 seq_puts(m,
"TUNNEL name, user-data-ok session-count\n");
1737 seq_puts(m,
" debug tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
1738 seq_puts(m,
" SESSION name, addr/port src-tid/sid "
1739 "dest-tid/sid state user-data-ok\n");
1740 seq_puts(m,
" mtu/mru/rcvseq/sendseq/lns debug reorderto\n");
1741 seq_puts(m,
" nr/ns tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
1747 if (pd->session ==
NULL)
1748 pppol2tp_seq_tunnel_show(m, pd->tunnel);
1750 pppol2tp_seq_session_show(m, pd->session);
1757 .
start = pppol2tp_seq_start,
1758 .next = pppol2tp_seq_next,
1759 .stop = pppol2tp_seq_stop,
1760 .show = pppol2tp_seq_show,
1770 sizeof(
struct pppol2tp_seq_data));
1775 .open = pppol2tp_proc_open,
1787 static __net_init int pppol2tp_init_net(
struct net *net)
1802 static __net_exit void pppol2tp_exit_net(
struct net *net)
1808 .init = pppol2tp_init_net,
1809 .exit = pppol2tp_exit_net,
1810 .id = &pppol2tp_net_id,
1817 static const struct proto_ops pppol2tp_ops = {
1820 .release = pppol2tp_release,
1822 .connect = pppol2tp_connect,
1825 .getname = pppol2tp_getname,
1829 .setsockopt = pppol2tp_setsockopt,
1830 .getsockopt = pppol2tp_getsockopt,
1831 .sendmsg = pppol2tp_sendmsg,
1832 .recvmsg = pppol2tp_recvmsg,
1837 static const struct pppox_proto pppol2tp_proto = {
1838 .create = pppol2tp_create,
1839 .ioctl = pppol2tp_ioctl
1842 #ifdef CONFIG_L2TP_V3
1846 .session_delete = pppol2tp_session_delete,
1851 static int __init pppol2tp_init(
void)
1861 goto out_unregister_pppol2tp_pernet;
1865 goto out_unregister_pppol2tp_proto;
1867 #ifdef CONFIG_L2TP_V3
1870 goto out_unregister_pppox;
1878 #ifdef CONFIG_L2TP_V3
1879 out_unregister_pppox:
1882 out_unregister_pppol2tp_proto:
1884 out_unregister_pppol2tp_pernet:
1889 static void __exit pppol2tp_exit(
void)
1891 #ifdef CONFIG_L2TP_V3