Lines Matching refs:sk

45 static inline struct l2tp_ip_sock *l2tp_ip_sk(const struct sock *sk)  in l2tp_ip_sk()  argument
47 return (struct l2tp_ip_sock *)sk; in l2tp_ip_sk()
52 struct sock *sk; in __l2tp_ip_bind_lookup() local
54 sk_for_each_bound(sk, &l2tp_ip_bind_table) { in __l2tp_ip_bind_lookup()
55 struct inet_sock *inet = inet_sk(sk); in __l2tp_ip_bind_lookup()
56 struct l2tp_ip_sock *l2tp = l2tp_ip_sk(sk); in __l2tp_ip_bind_lookup()
62 net_eq(sock_net(sk), net) && in __l2tp_ip_bind_lookup()
64 !(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif)) in __l2tp_ip_bind_lookup()
68 sk = NULL; in __l2tp_ip_bind_lookup()
70 return sk; in __l2tp_ip_bind_lookup()
75 struct sock *sk = __l2tp_ip_bind_lookup(net, laddr, dif, tunnel_id); in l2tp_ip_bind_lookup() local
76 if (sk) in l2tp_ip_bind_lookup()
77 sock_hold(sk); in l2tp_ip_bind_lookup()
79 return sk; in l2tp_ip_bind_lookup()
118 struct sock *sk; in l2tp_ip_recv() local
178 sk = tunnel->sock; in l2tp_ip_recv()
183 sk = __l2tp_ip_bind_lookup(net, iph->daddr, 0, tunnel_id); in l2tp_ip_recv()
187 if (sk == NULL) in l2tp_ip_recv()
190 sock_hold(sk); in l2tp_ip_recv()
192 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) in l2tp_ip_recv()
197 return sk_receive_skb(sk, skb, 1); in l2tp_ip_recv()
200 sock_put(sk); in l2tp_ip_recv()
207 static int l2tp_ip_open(struct sock *sk) in l2tp_ip_open() argument
210 inet_sk(sk)->inet_num = IPPROTO_L2TP; in l2tp_ip_open()
213 sk_add_node(sk, &l2tp_ip_table); in l2tp_ip_open()
219 static void l2tp_ip_close(struct sock *sk, long timeout) in l2tp_ip_close() argument
222 hlist_del_init(&sk->sk_bind_node); in l2tp_ip_close()
223 sk_del_node_init(sk); in l2tp_ip_close()
225 sk_common_release(sk); in l2tp_ip_close()
228 static void l2tp_ip_destroy_sock(struct sock *sk) in l2tp_ip_destroy_sock() argument
231 struct l2tp_tunnel *tunnel = l2tp_sock_to_tunnel(sk); in l2tp_ip_destroy_sock()
233 while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) in l2tp_ip_destroy_sock()
238 sock_put(sk); in l2tp_ip_destroy_sock()
241 sk_refcnt_debug_dec(sk); in l2tp_ip_destroy_sock()
244 static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) in l2tp_ip_bind() argument
246 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_bind()
248 struct net *net = sock_net(sk); in l2tp_ip_bind()
252 if (!sock_flag(sk, SOCK_ZAPPED)) in l2tp_ip_bind()
262 sk->sk_bound_dev_if, addr->l2tp_conn_id)) in l2tp_ip_bind()
267 lock_sock(sk); in l2tp_ip_bind()
268 if (sk->sk_state != TCP_CLOSE || addr_len < sizeof(struct sockaddr_l2tpip)) in l2tp_ip_bind()
281 sk_dst_reset(sk); in l2tp_ip_bind()
283 l2tp_ip_sk(sk)->conn_id = addr->l2tp_conn_id; in l2tp_ip_bind()
286 sk_add_bind_node(sk, &l2tp_ip_bind_table); in l2tp_ip_bind()
287 sk_del_node_init(sk); in l2tp_ip_bind()
290 sock_reset_flag(sk, SOCK_ZAPPED); in l2tp_ip_bind()
293 release_sock(sk); in l2tp_ip_bind()
303 static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) in l2tp_ip_connect() argument
308 if (sock_flag(sk, SOCK_ZAPPED)) /* Must bind first - autobinding does not work */ in l2tp_ip_connect()
317 rc = ip4_datagram_connect(sk, uaddr, addr_len); in l2tp_ip_connect()
321 lock_sock(sk); in l2tp_ip_connect()
323 l2tp_ip_sk(sk)->peer_conn_id = lsa->l2tp_conn_id; in l2tp_ip_connect()
326 hlist_del_init(&sk->sk_bind_node); in l2tp_ip_connect()
327 sk_add_bind_node(sk, &l2tp_ip_bind_table); in l2tp_ip_connect()
330 release_sock(sk); in l2tp_ip_connect()
334 static int l2tp_ip_disconnect(struct sock *sk, int flags) in l2tp_ip_disconnect() argument
336 if (sock_flag(sk, SOCK_ZAPPED)) in l2tp_ip_disconnect()
339 return udp_disconnect(sk, flags); in l2tp_ip_disconnect()
345 struct sock *sk = sock->sk; in l2tp_ip_getname() local
346 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_getname()
347 struct l2tp_ip_sock *lsk = l2tp_ip_sk(sk); in l2tp_ip_getname()
368 static int l2tp_ip_backlog_recv(struct sock *sk, struct sk_buff *skb) in l2tp_ip_backlog_recv() argument
373 rc = sock_queue_rcv_skb(sk, skb); in l2tp_ip_backlog_recv()
380 IP_INC_STATS(sock_net(sk), IPSTATS_MIB_INDISCARDS); in l2tp_ip_backlog_recv()
388 static int l2tp_ip_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) in l2tp_ip_sendmsg() argument
392 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_sendmsg()
398 lock_sock(sk); in l2tp_ip_sendmsg()
401 if (sock_flag(sk, SOCK_DEAD)) in l2tp_ip_sendmsg()
420 if (sk->sk_state != TCP_ESTABLISHED) in l2tp_ip_sendmsg()
429 skb = sock_wmalloc(sk, 2 + NET_SKB_PAD + sizeof(struct iphdr) + in l2tp_ip_sendmsg()
452 rt = (struct rtable *) __sk_dst_check(sk, 0); in l2tp_ip_sendmsg()
468 rt = ip_route_output_ports(sock_net(sk), fl4, sk, in l2tp_ip_sendmsg()
471 sk->sk_protocol, RT_CONN_FLAGS(sk), in l2tp_ip_sendmsg()
472 sk->sk_bound_dev_if); in l2tp_ip_sendmsg()
476 sk_setup_caps(sk, &rt->dst); in l2tp_ip_sendmsg()
490 rc = ip_queue_xmit(sk, skb, &inet->cork.fl); in l2tp_ip_sendmsg()
498 release_sock(sk); in l2tp_ip_sendmsg()
503 IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES); in l2tp_ip_sendmsg()
509 static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg, in l2tp_ip_recvmsg() argument
512 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_recvmsg()
521 skb = skb_recv_datagram(sk, flags, noblock, &err); in l2tp_ip_recvmsg()
535 sock_recv_timestamp(msg, sk, skb); in l2tp_ip_recvmsg()
550 skb_free_datagram(sk, skb); in l2tp_ip_recvmsg()