12 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14 #include <linux/icmp.h>
15 #include <linux/module.h>
17 #include <linux/random.h>
18 #include <linux/socket.h>
19 #include <linux/l2tp.h>
21 #include <linux/in6.h>
59 static struct sock *__l2tp_ip6_bind_lookup(
struct net *
net,
61 int dif,
u32 tunnel_id)
73 if ((l2tp->
conn_id == tunnel_id) &&
74 net_eq(sock_net(sk), net) &&
75 !(addr && ipv6_addr_equal(addr, laddr)) &&
76 !(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif))
85 static inline struct sock *l2tp_ip6_bind_lookup(
struct net *net,
87 int dif,
u32 tunnel_id)
89 struct sock *sk = __l2tp_ip6_bind_lookup(net, laddr, dif, tunnel_id);
134 unsigned char *
ptr, *optr;
140 optr = ptr = skb->
data;
142 if (!pskb_may_pull(skb, 4))
152 if (session_id == 0) {
169 if (!pskb_may_pull(skb, length))
182 if (!pskb_may_pull(skb, 12))
185 if ((skb->
data[0] & 0xc0) != 0xc0)
193 struct ipv6hdr *iph = ipv6_hdr(skb);
221 static int l2tp_ip6_open(
struct sock *sk)
227 sk_add_node(sk, &l2tp_ip6_table);
233 static void l2tp_ip6_close(
struct sock *sk,
long timeout)
236 hlist_del_init(&sk->sk_bind_node);
237 sk_del_node_init(sk);
243 static void l2tp_ip6_destroy_sock(
struct sock *sk)
265 if (addr_len <
sizeof(*addr))
268 addr_type = ipv6_addr_type(&addr->
l2tp_addr);
307 if (!sk->sk_bound_dev_if)
312 sk->sk_bound_dev_if);
327 inet->inet_rcv_saddr = inet->
inet_saddr = v4addr;
334 sk_add_bind_node(sk, &l2tp_ip6_bind_table);
335 sk_del_node_init(sk);
353 static int l2tp_ip6_connect(
struct sock *sk,
struct sockaddr *uaddr,
365 if (addr_len <
sizeof(*lsa))
368 addr_type = ipv6_addr_type(&usin->
sin6_addr);
369 if (addr_type & IPV6_ADDR_MULTICAST)
374 if (ipv4_is_multicast(daddr->s6_addr32[3]))
385 hlist_del_init(&sk->sk_bind_node);
386 sk_add_bind_node(sk, &l2tp_ip6_bind_table);
394 static int l2tp_ip6_disconnect(
struct sock *sk,
int flags)
403 int *uaddr_len,
int peer)
406 struct sock *sk = sock->
sk;
429 if (ipv6_addr_type(&lsa->
l2tp_addr) & IPV6_ADDR_LINKLOCAL)
431 *uaddr_len =
sizeof(*lsa);
435 static int l2tp_ip6_backlog_recv(
struct sock *sk,
struct sk_buff *skb)
452 static int l2tp_ip6_push_pending_frames(
struct sock *sk)
462 transhdr = (
__be32 *)skb_transport_header(skb);
474 static int l2tp_ip6_sendmsg(
struct kiocb *
iocb,
struct sock *sk,
480 struct in6_addr *daddr, *final_p,
final;
491 int ulen = len + transhdrlen;
507 memset(&fl6, 0,
sizeof(fl6));
523 if (flowlabel ==
NULL)
525 daddr = &flowlabel->
dst;
534 ipv6_addr_equal(daddr, &np->
daddr))
539 ipv6_addr_type(daddr) & IPV6_ADDR_LINKLOCAL)
549 if (fl6.flowi6_oif == 0)
550 fl6.flowi6_oif = sk->sk_bound_dev_if;
558 &hlimit, &tclass, &dontfrag);
560 fl6_sock_release(flowlabel);
565 if (flowlabel ==
NULL)
579 if (!ipv6_addr_any(daddr))
582 fl6.daddr.s6_addr[15] = 0x1;
583 if (ipv6_addr_any(&fl6.saddr) && !ipv6_addr_any(&np->
saddr))
584 fl6.saddr = np->
saddr;
588 if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
590 else if (!fl6.flowi6_oif)
593 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
602 if (ipv6_addr_is_multicast(&fl6.daddr))
622 ulen, transhdrlen, hlimit, tclass, opt,
628 err = l2tp_ip6_push_pending_frames(sk);
633 fl6_sock_release(flowlabel);
635 return err < 0 ? err : len;
640 goto back_from_confirm;
645 static int l2tp_ip6_recvmsg(
struct kiocb *iocb,
struct sock *sk,
646 struct msghdr *msg,
size_t len,
int noblock,
647 int flags,
int *addr_len)
659 *addr_len =
sizeof(*lsa);
678 sock_recv_timestamp(msg, sk, skb);
687 if (ipv6_addr_type(&lsa->
l2tp_addr) & IPV6_ADDR_LINKLOCAL)
699 return err ? err : copied;
702 static struct proto l2tp_ip6_prot = {
705 .init = l2tp_ip6_open,
706 .close = l2tp_ip6_close,
707 .bind = l2tp_ip6_bind,
708 .connect = l2tp_ip6_connect,
709 .disconnect = l2tp_ip6_disconnect,
711 .destroy = l2tp_ip6_destroy_sock,
714 .sendmsg = l2tp_ip6_sendmsg,
715 .recvmsg = l2tp_ip6_recvmsg,
716 .backlog_rcv = l2tp_ip6_backlog_recv,
726 static const struct proto_ops l2tp_ip6_ops = {
734 .getname = l2tp_ip6_getname,
754 .prot = &l2tp_ip6_prot,
755 .ops = &l2tp_ip6_ops,
759 static struct inet6_protocol l2tp_ip6_protocol
__read_mostly = {
760 .handler = l2tp_ip6_recv,
763 static int __init l2tp_ip6_init(
void)
767 pr_info(
"L2TP IP encapsulation support for IPv6 (L2TPv3)\n");
786 static void __exit l2tp_ip6_exit(
void)