Lines Matching refs:sk

61 int ip6_ra_control(struct sock *sk, int sel)  in ip6_ra_control()  argument
66 if (sk->sk_type != SOCK_RAW || inet_sk(sk)->inet_num != IPPROTO_RAW) in ip6_ra_control()
73 if (ra->sk == sk) { in ip6_ra_control()
83 sock_put(sk); in ip6_ra_control()
92 new_ra->sk = sk; in ip6_ra_control()
96 sock_hold(sk); in ip6_ra_control()
102 struct ipv6_txoptions *ipv6_update_options(struct sock *sk, in ipv6_update_options() argument
105 if (inet_sk(sk)->is_icsk) { in ipv6_update_options()
107 !((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) && in ipv6_update_options()
108 inet_sk(sk)->inet_daddr != LOOPBACK4_IPV6) { in ipv6_update_options()
109 struct inet_connection_sock *icsk = inet_csk(sk); in ipv6_update_options()
111 icsk->icsk_sync_mss(sk, icsk->icsk_pmtu_cookie); in ipv6_update_options()
114 opt = xchg((__force struct ipv6_txoptions **)&inet6_sk(sk)->opt, in ipv6_update_options()
116 sk_dst_reset(sk); in ipv6_update_options()
140 static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, in do_ipv6_setsockopt() argument
143 struct ipv6_pinfo *np = inet6_sk(sk); in do_ipv6_setsockopt()
144 struct net *net = sock_net(sk); in do_ipv6_setsockopt()
162 return ip6_mroute_setsockopt(sk, optname, optval, optlen); in do_ipv6_setsockopt()
166 lock_sock(sk); in do_ipv6_setsockopt()
177 if (sk->sk_type == SOCK_RAW) in do_ipv6_setsockopt()
180 if (sk->sk_protocol == IPPROTO_UDP || in do_ipv6_setsockopt()
181 sk->sk_protocol == IPPROTO_UDPLITE) { in do_ipv6_setsockopt()
182 struct udp_sock *up = udp_sk(sk); in do_ipv6_setsockopt()
187 } else if (sk->sk_protocol != IPPROTO_TCP) in do_ipv6_setsockopt()
190 if (sk->sk_state != TCP_ESTABLISHED) { in do_ipv6_setsockopt()
195 if (ipv6_only_sock(sk) || in do_ipv6_setsockopt()
196 !ipv6_addr_v4mapped(&sk->sk_v6_daddr)) { in do_ipv6_setsockopt()
201 fl6_free_socklist(sk); in do_ipv6_setsockopt()
202 ipv6_sock_mc_close(sk); in do_ipv6_setsockopt()
209 sk_refcnt_debug_dec(sk); in do_ipv6_setsockopt()
211 if (sk->sk_protocol == IPPROTO_TCP) { in do_ipv6_setsockopt()
212 struct inet_connection_sock *icsk = inet_csk(sk); in do_ipv6_setsockopt()
214 sock_prot_inuse_add(net, sk->sk_prot, -1); in do_ipv6_setsockopt()
217 sk->sk_prot = &tcp_prot; in do_ipv6_setsockopt()
219 sk->sk_socket->ops = &inet_stream_ops; in do_ipv6_setsockopt()
220 sk->sk_family = PF_INET; in do_ipv6_setsockopt()
221 tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); in do_ipv6_setsockopt()
225 if (sk->sk_protocol == IPPROTO_UDPLITE) in do_ipv6_setsockopt()
228 sock_prot_inuse_add(net, sk->sk_prot, -1); in do_ipv6_setsockopt()
231 sk->sk_prot = prot; in do_ipv6_setsockopt()
232 sk->sk_socket->ops = &inet_dgram_ops; in do_ipv6_setsockopt()
233 sk->sk_family = PF_INET; in do_ipv6_setsockopt()
238 atomic_sub(opt->tot_len, &sk->sk_omem_alloc); in do_ipv6_setsockopt()
244 sk->sk_destruct = inet_sock_destruct; in do_ipv6_setsockopt()
249 sk_refcnt_debug_inc(sk); in do_ipv6_setsockopt()
258 inet_sk(sk)->inet_num) in do_ipv6_setsockopt()
260 sk->sk_ipv6only = valbool; in do_ipv6_setsockopt()
376 inet_sk(sk)->transparent = valbool; in do_ipv6_setsockopt()
410 opt = rcu_dereference_protected(np->opt, sock_owned_by_user(sk)); in do_ipv6_setsockopt()
411 opt = ipv6_renew_options(sk, opt, optname, in do_ipv6_setsockopt()
438 opt = ipv6_update_options(sk, opt); in do_ipv6_setsockopt()
441 atomic_sub(opt->tot_len, &sk->sk_omem_alloc); in do_ipv6_setsockopt()
460 if (sk->sk_bound_dev_if && pkt.ipi6_ifindex != sk->sk_bound_dev_if) in do_ipv6_setsockopt()
477 fl6.flowi6_oif = sk->sk_bound_dev_if; in do_ipv6_setsockopt()
478 fl6.flowi6_mark = sk->sk_mark; in do_ipv6_setsockopt()
490 opt = sock_kmalloc(sk, sizeof(*opt) + optlen, GFP_KERNEL); in do_ipv6_setsockopt()
505 retv = ip6_datagram_send_ctl(net, sk, &msg, &fl6, opt, &junk, in do_ipv6_setsockopt()
511 opt = ipv6_update_options(sk, opt); in do_ipv6_setsockopt()
514 atomic_sub(opt->tot_len, &sk->sk_omem_alloc); in do_ipv6_setsockopt()
529 if (sk->sk_type == SOCK_STREAM) in do_ipv6_setsockopt()
570 if (sk->sk_bound_dev_if) in do_ipv6_setsockopt()
579 if (sk->sk_type == SOCK_STREAM) in do_ipv6_setsockopt()
587 if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val) in do_ipv6_setsockopt()
609 if (inet_sk(sk)->is_icsk) in do_ipv6_setsockopt()
617 retv = ipv6_sock_mc_join(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr); in do_ipv6_setsockopt()
619 retv = ipv6_sock_mc_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr); in do_ipv6_setsockopt()
635 retv = ipv6_sock_ac_join(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_acaddr); in do_ipv6_setsockopt()
637 retv = ipv6_sock_ac_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_acaddr); in do_ipv6_setsockopt()
658 retv = ipv6_sock_mc_join(sk, greq.gr_interface, in do_ipv6_setsockopt()
661 retv = ipv6_sock_mc_drop(sk, greq.gr_interface, in do_ipv6_setsockopt()
694 retv = ipv6_sock_mc_join(sk, greqs.gsr_interface, in do_ipv6_setsockopt()
705 retv = ip6_mc_source(add, omode, sk, &greqs); in do_ipv6_setsockopt()
740 retv = ip6_mc_msfilter(sk, gsf); in do_ipv6_setsockopt()
748 retv = ip6_ra_control(sk, val); in do_ipv6_setsockopt()
771 skb_queue_purge(&sk->sk_error_queue); in do_ipv6_setsockopt()
781 retv = ipv6_flowlabel_opt(sk, optval, optlen); in do_ipv6_setsockopt()
788 retv = xfrm_user_policy(sk, optname, optval, optlen); in do_ipv6_setsockopt()
871 release_sock(sk); in do_ipv6_setsockopt()
878 release_sock(sk); in do_ipv6_setsockopt()
884 int ipv6_setsockopt(struct sock *sk, int level, int optname, in ipv6_setsockopt() argument
889 if (level == SOL_IP && sk->sk_type != SOCK_RAW) in ipv6_setsockopt()
890 return udp_prot.setsockopt(sk, level, optname, optval, optlen); in ipv6_setsockopt()
895 err = do_ipv6_setsockopt(sk, level, optname, optval, optlen); in ipv6_setsockopt()
900 lock_sock(sk); in ipv6_setsockopt()
901 err = nf_setsockopt(sk, PF_INET6, optname, optval, in ipv6_setsockopt()
903 release_sock(sk); in ipv6_setsockopt()
911 int compat_ipv6_setsockopt(struct sock *sk, int level, int optname, in compat_ipv6_setsockopt() argument
916 if (level == SOL_IP && sk->sk_type != SOCK_RAW) { in compat_ipv6_setsockopt()
918 return udp_prot.compat_setsockopt(sk, level, optname, in compat_ipv6_setsockopt()
920 return udp_prot.setsockopt(sk, level, optname, optval, optlen); in compat_ipv6_setsockopt()
927 return compat_mc_setsockopt(sk, level, optname, optval, optlen, in compat_ipv6_setsockopt()
930 err = do_ipv6_setsockopt(sk, level, optname, optval, optlen); in compat_ipv6_setsockopt()
935 lock_sock(sk); in compat_ipv6_setsockopt()
936 err = compat_nf_setsockopt(sk, PF_INET6, optname, in compat_ipv6_setsockopt()
938 release_sock(sk); in compat_ipv6_setsockopt()
946 static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt, in ipv6_getsockopt_sticky() argument
980 static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, in do_ipv6_getsockopt() argument
983 struct ipv6_pinfo *np = inet6_sk(sk); in do_ipv6_getsockopt()
988 return ip6_mroute_getsockopt(sk, optname, optval, optlen); in do_ipv6_getsockopt()
994 if (sk->sk_protocol != IPPROTO_UDP && in do_ipv6_getsockopt()
995 sk->sk_protocol != IPPROTO_UDPLITE && in do_ipv6_getsockopt()
996 sk->sk_protocol != IPPROTO_TCP) in do_ipv6_getsockopt()
998 if (sk->sk_state != TCP_ESTABLISHED) in do_ipv6_getsockopt()
1000 val = sk->sk_family; in do_ipv6_getsockopt()
1013 lock_sock(sk); in do_ipv6_getsockopt()
1014 err = ip6_mc_msfget(sk, &gsf, in do_ipv6_getsockopt()
1016 release_sock(sk); in do_ipv6_getsockopt()
1025 if (sk->sk_type != SOCK_STREAM) in do_ipv6_getsockopt()
1032 lock_sock(sk); in do_ipv6_getsockopt()
1035 ip6_datagram_recv_ctl(sk, &msg, skb); in do_ipv6_getsockopt()
1036 release_sock(sk); in do_ipv6_getsockopt()
1042 src_info.ipi6_addr = np->mcast_oif ? sk->sk_v6_daddr : np->sticky_pktinfo.ipi6_addr; in do_ipv6_getsockopt()
1058 src_info.ipi6_addr = np->mcast_oif ? sk->sk_v6_daddr : in do_ipv6_getsockopt()
1081 dst = __sk_dst_get(sk); in do_ipv6_getsockopt()
1091 val = sk->sk_ipv6only; in do_ipv6_getsockopt()
1125 lock_sock(sk); in do_ipv6_getsockopt()
1126 opt = rcu_dereference_protected(np->opt, sock_owned_by_user(sk)); in do_ipv6_getsockopt()
1127 len = ipv6_getsockopt_sticky(sk, opt, optname, optval, len); in do_ipv6_getsockopt()
1128 release_sock(sk); in do_ipv6_getsockopt()
1179 dst = __sk_dst_get(sk); in do_ipv6_getsockopt()
1195 val = inet_sk(sk)->transparent; in do_ipv6_getsockopt()
1214 dst = __sk_dst_get(sk); in do_ipv6_getsockopt()
1221 val = sock_net(sk)->ipv6.devconf_all->hop_limit; in do_ipv6_getsockopt()
1268 val = ipv6_flowlabel_opt_get(sk, &freq, flags); in do_ipv6_getsockopt()
1321 int ipv6_getsockopt(struct sock *sk, int level, int optname, in ipv6_getsockopt() argument
1326 if (level == SOL_IP && sk->sk_type != SOCK_RAW) in ipv6_getsockopt()
1327 return udp_prot.getsockopt(sk, level, optname, optval, optlen); in ipv6_getsockopt()
1332 err = do_ipv6_getsockopt(sk, level, optname, optval, optlen, 0); in ipv6_getsockopt()
1341 lock_sock(sk); in ipv6_getsockopt()
1342 err = nf_getsockopt(sk, PF_INET6, optname, optval, in ipv6_getsockopt()
1344 release_sock(sk); in ipv6_getsockopt()
1354 int compat_ipv6_getsockopt(struct sock *sk, int level, int optname, in compat_ipv6_getsockopt() argument
1359 if (level == SOL_IP && sk->sk_type != SOCK_RAW) { in compat_ipv6_getsockopt()
1361 return udp_prot.compat_getsockopt(sk, level, optname, in compat_ipv6_getsockopt()
1363 return udp_prot.getsockopt(sk, level, optname, optval, optlen); in compat_ipv6_getsockopt()
1370 return compat_mc_getsockopt(sk, level, optname, optval, optlen, in compat_ipv6_getsockopt()
1373 err = do_ipv6_getsockopt(sk, level, optname, optval, optlen, in compat_ipv6_getsockopt()
1383 lock_sock(sk); in compat_ipv6_getsockopt()
1384 err = compat_nf_getsockopt(sk, PF_INET6, in compat_ipv6_getsockopt()
1386 release_sock(sk); in compat_ipv6_getsockopt()