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
180 sk = tunnel->sock; in l2tp_ip_recv()
185 sk = __l2tp_ip_bind_lookup(net, iph->daddr, 0, tunnel_id); in l2tp_ip_recv()
189 if (sk == NULL) in l2tp_ip_recv()
192 sock_hold(sk); in l2tp_ip_recv()
194 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) in l2tp_ip_recv()
199 return sk_receive_skb(sk, skb, 1); in l2tp_ip_recv()
202 sock_put(sk); in l2tp_ip_recv()
209 static int l2tp_ip_open(struct sock *sk) in l2tp_ip_open() argument
212 inet_sk(sk)->inet_num = IPPROTO_L2TP; in l2tp_ip_open()
215 sk_add_node(sk, &l2tp_ip_table); in l2tp_ip_open()
221 static void l2tp_ip_close(struct sock *sk, long timeout) in l2tp_ip_close() argument
224 hlist_del_init(&sk->sk_bind_node); in l2tp_ip_close()
225 sk_del_node_init(sk); in l2tp_ip_close()
227 sk_common_release(sk); in l2tp_ip_close()
230 static void l2tp_ip_destroy_sock(struct sock *sk) in l2tp_ip_destroy_sock() argument
233 struct l2tp_tunnel *tunnel = l2tp_sock_to_tunnel(sk); in l2tp_ip_destroy_sock()
235 while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) in l2tp_ip_destroy_sock()
240 sock_put(sk); in l2tp_ip_destroy_sock()
243 sk_refcnt_debug_dec(sk); in l2tp_ip_destroy_sock()
246 static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) in l2tp_ip_bind() argument
248 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_bind()
250 struct net *net = sock_net(sk); in l2tp_ip_bind()
254 if (!sock_flag(sk, SOCK_ZAPPED)) in l2tp_ip_bind()
264 sk->sk_bound_dev_if, addr->l2tp_conn_id)) in l2tp_ip_bind()
269 lock_sock(sk); in l2tp_ip_bind()
270 if (sk->sk_state != TCP_CLOSE || addr_len < sizeof(struct sockaddr_l2tpip)) in l2tp_ip_bind()
283 sk_dst_reset(sk); in l2tp_ip_bind()
285 l2tp_ip_sk(sk)->conn_id = addr->l2tp_conn_id; in l2tp_ip_bind()
288 sk_add_bind_node(sk, &l2tp_ip_bind_table); in l2tp_ip_bind()
289 sk_del_node_init(sk); in l2tp_ip_bind()
292 sock_reset_flag(sk, SOCK_ZAPPED); in l2tp_ip_bind()
295 release_sock(sk); in l2tp_ip_bind()
305 static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) in l2tp_ip_connect() argument
310 if (sock_flag(sk, SOCK_ZAPPED)) /* Must bind first - autobinding does not work */ in l2tp_ip_connect()
319 rc = ip4_datagram_connect(sk, uaddr, addr_len); in l2tp_ip_connect()
323 lock_sock(sk); in l2tp_ip_connect()
325 l2tp_ip_sk(sk)->peer_conn_id = lsa->l2tp_conn_id; in l2tp_ip_connect()
328 hlist_del_init(&sk->sk_bind_node); in l2tp_ip_connect()
329 sk_add_bind_node(sk, &l2tp_ip_bind_table); in l2tp_ip_connect()
332 release_sock(sk); in l2tp_ip_connect()
336 static int l2tp_ip_disconnect(struct sock *sk, int flags) in l2tp_ip_disconnect() argument
338 if (sock_flag(sk, SOCK_ZAPPED)) in l2tp_ip_disconnect()
341 return udp_disconnect(sk, flags); in l2tp_ip_disconnect()
347 struct sock *sk = sock->sk; in l2tp_ip_getname() local
348 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_getname()
349 struct l2tp_ip_sock *lsk = l2tp_ip_sk(sk); in l2tp_ip_getname()
370 static int l2tp_ip_backlog_recv(struct sock *sk, struct sk_buff *skb) in l2tp_ip_backlog_recv() argument
375 rc = sock_queue_rcv_skb(sk, skb); in l2tp_ip_backlog_recv()
382 IP_INC_STATS(sock_net(sk), IPSTATS_MIB_INDISCARDS); in l2tp_ip_backlog_recv()
390 static int l2tp_ip_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) in l2tp_ip_sendmsg() argument
394 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_sendmsg()
400 lock_sock(sk); in l2tp_ip_sendmsg()
403 if (sock_flag(sk, SOCK_DEAD)) in l2tp_ip_sendmsg()
422 if (sk->sk_state != TCP_ESTABLISHED) in l2tp_ip_sendmsg()
431 skb = sock_wmalloc(sk, 2 + NET_SKB_PAD + sizeof(struct iphdr) + in l2tp_ip_sendmsg()
454 rt = (struct rtable *) __sk_dst_check(sk, 0); in l2tp_ip_sendmsg()
470 rt = ip_route_output_ports(sock_net(sk), fl4, sk, in l2tp_ip_sendmsg()
473 sk->sk_protocol, RT_CONN_FLAGS(sk), in l2tp_ip_sendmsg()
474 sk->sk_bound_dev_if); in l2tp_ip_sendmsg()
478 sk_setup_caps(sk, &rt->dst); in l2tp_ip_sendmsg()
492 rc = ip_queue_xmit(sk, skb, &inet->cork.fl); in l2tp_ip_sendmsg()
500 release_sock(sk); in l2tp_ip_sendmsg()
505 IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES); in l2tp_ip_sendmsg()
511 static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg, in l2tp_ip_recvmsg() argument
514 struct inet_sock *inet = inet_sk(sk); in l2tp_ip_recvmsg()
523 skb = skb_recv_datagram(sk, flags, noblock, &err); in l2tp_ip_recvmsg()
537 sock_recv_timestamp(msg, sk, skb); in l2tp_ip_recvmsg()
552 skb_free_datagram(sk, skb); in l2tp_ip_recvmsg()