Lines Matching refs:sk

54 static inline struct l2tp_ip6_sock *l2tp_ip6_sk(const struct sock *sk)  in l2tp_ip6_sk()  argument
56 return (struct l2tp_ip6_sock *)sk; in l2tp_ip6_sk()
63 struct sock *sk; in __l2tp_ip6_bind_lookup() local
65 sk_for_each_bound(sk, &l2tp_ip6_bind_table) { in __l2tp_ip6_bind_lookup()
66 const struct in6_addr *addr = inet6_rcv_saddr(sk); in __l2tp_ip6_bind_lookup()
67 struct l2tp_ip6_sock *l2tp = l2tp_ip6_sk(sk); in __l2tp_ip6_bind_lookup()
73 net_eq(sock_net(sk), net) && in __l2tp_ip6_bind_lookup()
75 !(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif)) in __l2tp_ip6_bind_lookup()
79 sk = NULL; in __l2tp_ip6_bind_lookup()
81 return sk; in __l2tp_ip6_bind_lookup()
88 struct sock *sk = __l2tp_ip6_bind_lookup(net, laddr, dif, tunnel_id); in l2tp_ip6_bind_lookup() local
89 if (sk) in l2tp_ip6_bind_lookup()
90 sock_hold(sk); in l2tp_ip6_bind_lookup()
92 return sk; in l2tp_ip6_bind_lookup()
130 struct sock *sk; in l2tp_ip6_recv() local
192 sk = tunnel->sock; in l2tp_ip6_recv()
197 sk = __l2tp_ip6_bind_lookup(&init_net, &iph->daddr, in l2tp_ip6_recv()
202 if (sk == NULL) in l2tp_ip6_recv()
205 sock_hold(sk); in l2tp_ip6_recv()
207 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) in l2tp_ip6_recv()
212 return sk_receive_skb(sk, skb, 1); in l2tp_ip6_recv()
215 sock_put(sk); in l2tp_ip6_recv()
222 static int l2tp_ip6_open(struct sock *sk) in l2tp_ip6_open() argument
225 inet_sk(sk)->inet_num = IPPROTO_L2TP; in l2tp_ip6_open()
228 sk_add_node(sk, &l2tp_ip6_table); in l2tp_ip6_open()
234 static void l2tp_ip6_close(struct sock *sk, long timeout) in l2tp_ip6_close() argument
237 hlist_del_init(&sk->sk_bind_node); in l2tp_ip6_close()
238 sk_del_node_init(sk); in l2tp_ip6_close()
241 sk_common_release(sk); in l2tp_ip6_close()
244 static void l2tp_ip6_destroy_sock(struct sock *sk) in l2tp_ip6_destroy_sock() argument
246 struct l2tp_tunnel *tunnel = l2tp_sock_to_tunnel(sk); in l2tp_ip6_destroy_sock()
248 lock_sock(sk); in l2tp_ip6_destroy_sock()
249 ip6_flush_pending_frames(sk); in l2tp_ip6_destroy_sock()
250 release_sock(sk); in l2tp_ip6_destroy_sock()
254 sock_put(sk); in l2tp_ip6_destroy_sock()
257 inet6_destroy_sock(sk); in l2tp_ip6_destroy_sock()
260 static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) in l2tp_ip6_bind() argument
262 struct inet_sock *inet = inet_sk(sk); in l2tp_ip6_bind()
263 struct ipv6_pinfo *np = inet6_sk(sk); in l2tp_ip6_bind()
269 if (!sock_flag(sk, SOCK_ZAPPED)) in l2tp_ip6_bind()
289 sk->sk_bound_dev_if, addr->l2tp_conn_id)) in l2tp_ip6_bind()
293 lock_sock(sk); in l2tp_ip6_bind()
296 if (sk->sk_state != TCP_CLOSE) in l2tp_ip6_bind()
310 sk->sk_bound_dev_if = addr->l2tp_scope_id; in l2tp_ip6_bind()
315 if (!sk->sk_bound_dev_if) in l2tp_ip6_bind()
319 dev = dev_get_by_index_rcu(sock_net(sk), in l2tp_ip6_bind()
320 sk->sk_bound_dev_if); in l2tp_ip6_bind()
330 if (!ipv6_chk_addr(sock_net(sk), &addr->l2tp_addr, dev, 0)) in l2tp_ip6_bind()
336 sk->sk_v6_rcv_saddr = addr->l2tp_addr; in l2tp_ip6_bind()
339 l2tp_ip6_sk(sk)->conn_id = addr->l2tp_conn_id; in l2tp_ip6_bind()
342 sk_add_bind_node(sk, &l2tp_ip6_bind_table); in l2tp_ip6_bind()
343 sk_del_node_init(sk); in l2tp_ip6_bind()
346 sock_reset_flag(sk, SOCK_ZAPPED); in l2tp_ip6_bind()
347 release_sock(sk); in l2tp_ip6_bind()
353 release_sock(sk); in l2tp_ip6_bind()
361 static int l2tp_ip6_connect(struct sock *sk, struct sockaddr *uaddr, in l2tp_ip6_connect() argument
370 if (sock_flag(sk, SOCK_ZAPPED)) /* Must bind first - autobinding does not work */ in l2tp_ip6_connect()
389 rc = ip6_datagram_connect(sk, uaddr, addr_len); in l2tp_ip6_connect()
391 lock_sock(sk); in l2tp_ip6_connect()
393 l2tp_ip6_sk(sk)->peer_conn_id = lsa->l2tp_conn_id; in l2tp_ip6_connect()
396 hlist_del_init(&sk->sk_bind_node); in l2tp_ip6_connect()
397 sk_add_bind_node(sk, &l2tp_ip6_bind_table); in l2tp_ip6_connect()
400 release_sock(sk); in l2tp_ip6_connect()
405 static int l2tp_ip6_disconnect(struct sock *sk, int flags) in l2tp_ip6_disconnect() argument
407 if (sock_flag(sk, SOCK_ZAPPED)) in l2tp_ip6_disconnect()
410 return udp_disconnect(sk, flags); in l2tp_ip6_disconnect()
417 struct sock *sk = sock->sk; in l2tp_ip6_getname() local
418 struct ipv6_pinfo *np = inet6_sk(sk); in l2tp_ip6_getname()
419 struct l2tp_ip6_sock *lsk = l2tp_ip6_sk(sk); in l2tp_ip6_getname()
429 lsa->l2tp_addr = sk->sk_v6_daddr; in l2tp_ip6_getname()
433 if (ipv6_addr_any(&sk->sk_v6_rcv_saddr)) in l2tp_ip6_getname()
436 lsa->l2tp_addr = sk->sk_v6_rcv_saddr; in l2tp_ip6_getname()
441 lsa->l2tp_scope_id = sk->sk_bound_dev_if; in l2tp_ip6_getname()
446 static int l2tp_ip6_backlog_recv(struct sock *sk, struct sk_buff *skb) in l2tp_ip6_backlog_recv() argument
451 rc = sock_queue_rcv_skb(sk, skb); in l2tp_ip6_backlog_recv()
463 static int l2tp_ip6_push_pending_frames(struct sock *sk) in l2tp_ip6_push_pending_frames() argument
469 skb = skb_peek(&sk->sk_write_queue); in l2tp_ip6_push_pending_frames()
476 err = ip6_push_pending_frames(sk); in l2tp_ip6_push_pending_frames()
485 static int l2tp_ip6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) in l2tp_ip6_sendmsg() argument
490 struct ipv6_pinfo *np = inet6_sk(sk); in l2tp_ip6_sendmsg()
519 fl6.flowi6_mark = sk->sk_mark; in l2tp_ip6_sendmsg()
532 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel); in l2tp_ip6_sendmsg()
542 if (sk->sk_state == TCP_ESTABLISHED && in l2tp_ip6_sendmsg()
543 ipv6_addr_equal(daddr, &sk->sk_v6_daddr)) in l2tp_ip6_sendmsg()
544 daddr = &sk->sk_v6_daddr; in l2tp_ip6_sendmsg()
551 if (sk->sk_state != TCP_ESTABLISHED) in l2tp_ip6_sendmsg()
554 daddr = &sk->sk_v6_daddr; in l2tp_ip6_sendmsg()
559 fl6.flowi6_oif = sk->sk_bound_dev_if; in l2tp_ip6_sendmsg()
566 err = ip6_datagram_send_ctl(sock_net(sk), sk, msg, &fl6, opt, in l2tp_ip6_sendmsg()
573 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel); in l2tp_ip6_sendmsg()
589 fl6.flowi6_proto = sk->sk_protocol; in l2tp_ip6_sendmsg()
604 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); in l2tp_ip6_sendmsg()
606 dst = ip6_dst_lookup_flow(sk, &fl6, final_p); in l2tp_ip6_sendmsg()
625 lock_sock(sk); in l2tp_ip6_sendmsg()
626 err = ip6_append_data(sk, ip_generic_getfrag, msg, in l2tp_ip6_sendmsg()
631 ip6_flush_pending_frames(sk); in l2tp_ip6_sendmsg()
633 err = l2tp_ip6_push_pending_frames(sk); in l2tp_ip6_sendmsg()
634 release_sock(sk); in l2tp_ip6_sendmsg()
651 static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, in l2tp_ip6_recvmsg() argument
654 struct ipv6_pinfo *np = inet6_sk(sk); in l2tp_ip6_recvmsg()
667 return ipv6_recv_error(sk, msg, len, addr_len); in l2tp_ip6_recvmsg()
669 skb = skb_recv_datagram(sk, flags, noblock, &err); in l2tp_ip6_recvmsg()
683 sock_recv_timestamp(msg, sk, skb); in l2tp_ip6_recvmsg()
698 ip6_datagram_recv_ctl(sk, msg, skb); in l2tp_ip6_recvmsg()
703 skb_free_datagram(sk, skb); in l2tp_ip6_recvmsg()