Lines Matching refs:sk
59 static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb) in ip6_finish_output2() argument
73 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) && in ip6_finish_output2()
85 sk, newskb, NULL, newskb->dev, in ip6_finish_output2()
125 static int ip6_finish_output(struct sock *sk, struct sk_buff *skb) in ip6_finish_output() argument
130 return ip6_fragment(sk, skb, ip6_finish_output2); in ip6_finish_output()
132 return ip6_finish_output2(sk, skb); in ip6_finish_output()
135 int ip6_output(struct sock *sk, struct sk_buff *skb) in ip6_output() argument
146 return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, sk, skb, in ip6_output()
156 int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6, in ip6_xmit() argument
159 struct net *net = sock_net(sk); in ip6_xmit()
160 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_xmit()
189 skb_set_owner_w(skb, sk); in ip6_xmit()
220 skb->priority = sk->sk_priority; in ip6_xmit()
221 skb->mark = sk->sk_mark; in ip6_xmit()
227 return NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT, sk, skb, in ip6_xmit()
232 ipv6_local_error(sk, EMSGSIZE, fl6, mtu); in ip6_xmit()
246 struct sock *sk = ra->sk; in ip6_call_ra_chain() local
247 if (sk && ra->sel == sel && in ip6_call_ra_chain()
248 (!sk->sk_bound_dev_if || in ip6_call_ra_chain()
249 sk->sk_bound_dev_if == skb->dev->ifindex)) { in ip6_call_ra_chain()
255 last = sk; in ip6_call_ra_chain()
320 static inline int ip6_forward_finish(struct sock *sk, struct sk_buff *skb) in ip6_forward_finish() argument
323 return dst_output_sk(sk, skb); in ip6_forward_finish()
379 if (unlikely(skb->sk)) in ip6_forward()
546 int ip6_fragment(struct sock *sk, struct sk_buff *skb, in ip6_fragment() argument
551 struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ? in ip6_fragment()
552 inet6_sk(skb->sk) : NULL; in ip6_fragment()
573 if (skb->sk && dst_allfrag(skb_dst(skb))) in ip6_fragment()
574 sk_nocaps_add(skb->sk, NETIF_F_GSO_MASK); in ip6_fragment()
610 BUG_ON(frag->sk); in ip6_fragment()
611 if (skb->sk) { in ip6_fragment()
612 frag->sk = skb->sk; in ip6_fragment()
676 err = output(sk, skb); in ip6_fragment()
709 frag2->sk = NULL; in ip6_fragment()
771 if (skb->sk) in ip6_fragment()
772 skb_set_owner_w(frag, skb->sk); in ip6_fragment()
809 err = output(sk, frag); in ip6_fragment()
836 static struct dst_entry *ip6_sk_dst_check(struct sock *sk, in ip6_sk_dst_check() argument
840 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_sk_dst_check()
882 static int ip6_dst_lookup_tail(struct sock *sk, in ip6_dst_lookup_tail() argument
885 struct net *net = sock_net(sk); in ip6_dst_lookup_tail()
907 *dst = ip6_route_output(net, sk, fl6); in ip6_dst_lookup_tail()
910 sk ? inet6_sk(sk)->srcprefs : 0, in ip6_dst_lookup_tail()
929 *dst = ip6_route_output_flags(net, sk, fl6, flags); in ip6_dst_lookup_tail()
970 *dst = ip6_route_output(net, sk, &fl_gw6); in ip6_dst_lookup_tail()
998 int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6) in ip6_dst_lookup() argument
1001 return ip6_dst_lookup_tail(sk, dst, fl6); in ip6_dst_lookup()
1016 struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, in ip6_dst_lookup_flow() argument
1022 err = ip6_dst_lookup_tail(sk, &dst, fl6); in ip6_dst_lookup_flow()
1028 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); in ip6_dst_lookup_flow()
1046 struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, in ip6_sk_dst_lookup_flow() argument
1049 struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); in ip6_sk_dst_lookup_flow()
1052 dst = ip6_sk_dst_check(sk, dst, fl6); in ip6_sk_dst_lookup_flow()
1054 err = ip6_dst_lookup_tail(sk, &dst, fl6); in ip6_sk_dst_lookup_flow()
1060 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); in ip6_sk_dst_lookup_flow()
1064 static inline int ip6_ufo_append_data(struct sock *sk, in ip6_ufo_append_data() argument
1083 skb = sock_alloc_send_skb(sk, in ip6_ufo_append_data()
1116 ipv6_select_ident(sock_net(sk), &fhdr, rt); in ip6_ufo_append_data()
1120 return skb_append_datato_frags(sk, skb, getfrag, from, in ip6_ufo_append_data()
1160 static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork, in ip6_setup_cork() argument
1165 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_setup_cork()
1175 v6_cork->opt = kzalloc(opt->tot_len, sk->sk_allocation); in ip6_setup_cork()
1184 sk->sk_allocation); in ip6_setup_cork()
1189 sk->sk_allocation); in ip6_setup_cork()
1194 sk->sk_allocation); in ip6_setup_cork()
1199 sk->sk_allocation); in ip6_setup_cork()
1228 static int __ip6_append_data(struct sock *sk, in __ip6_append_data() argument
1278 if (ip6_sk_ignore_df(sk)) in __ip6_append_data()
1285 (sk->sk_protocol == IPPROTO_UDP || in __ip6_append_data()
1286 sk->sk_protocol == IPPROTO_RAW)) { in __ip6_append_data()
1287 ipv6_local_rxpmtu(sk, fl6, mtu - headersize + in __ip6_append_data()
1294 ipv6_local_error(sk, EMSGSIZE, fl6, in __ip6_append_data()
1301 if (sk->sk_type == SOCK_DGRAM || sk->sk_type == SOCK_RAW) { in __ip6_append_data()
1302 sock_tx_timestamp(sk, &tx_flags); in __ip6_append_data()
1304 sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID) in __ip6_append_data()
1305 tskey = sk->sk_tskey++; in __ip6_append_data()
1313 if (transhdrlen && sk->sk_protocol == IPPROTO_UDP && in __ip6_append_data()
1337 (sk->sk_protocol == IPPROTO_UDP) && in __ip6_append_data()
1339 (sk->sk_type == SOCK_DGRAM) && !udp_get_no_check6_tx(sk)) { in __ip6_append_data()
1340 err = ip6_ufo_append_data(sk, queue, getfrag, from, length, in __ip6_append_data()
1412 skb = sock_alloc_send_skb(sk, in __ip6_append_data()
1417 if (atomic_read(&sk->sk_wmem_alloc) <= in __ip6_append_data()
1418 2 * sk->sk_sndbuf) in __ip6_append_data()
1419 skb = sock_wmalloc(sk, in __ip6_append_data()
1421 sk->sk_allocation); in __ip6_append_data()
1502 if (!sk_page_frag_refill(sk, pfrag)) in __ip6_append_data()
1527 atomic_add(copy, &sk->sk_wmem_alloc); in __ip6_append_data()
1539 IP6_INC_STATS(sock_net(sk), rt->rt6i_idev, IPSTATS_MIB_OUTDISCARDS); in __ip6_append_data()
1543 int ip6_append_data(struct sock *sk, in ip6_append_data() argument
1550 struct inet_sock *inet = inet_sk(sk); in ip6_append_data()
1551 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_append_data()
1557 if (skb_queue_empty(&sk->sk_write_queue)) { in ip6_append_data()
1561 err = ip6_setup_cork(sk, &inet->cork, &np->cork, hlimit, in ip6_append_data()
1574 return __ip6_append_data(sk, fl6, &sk->sk_write_queue, &inet->cork.base, in ip6_append_data()
1575 &np->cork, sk_page_frag(sk), getfrag, in ip6_append_data()
1600 struct sk_buff *__ip6_make_skb(struct sock *sk, in __ip6_make_skb() argument
1608 struct ipv6_pinfo *np = inet6_sk(sk); in __ip6_make_skb()
1609 struct net *net = sock_net(sk); in __ip6_make_skb()
1632 tmp_skb->sk = NULL; in __ip6_make_skb()
1636 skb->ignore_df = ip6_sk_ignore_df(sk); in __ip6_make_skb()
1657 skb->priority = sk->sk_priority; in __ip6_make_skb()
1658 skb->mark = sk->sk_mark; in __ip6_make_skb()
1676 struct net *net = sock_net(skb->sk); in ip6_send_skb()
1692 int ip6_push_pending_frames(struct sock *sk) in ip6_push_pending_frames() argument
1696 skb = ip6_finish_skb(sk); in ip6_push_pending_frames()
1704 static void __ip6_flush_pending_frames(struct sock *sk, in __ip6_flush_pending_frames() argument
1713 IP6_INC_STATS(sock_net(sk), ip6_dst_idev(skb_dst(skb)), in __ip6_flush_pending_frames()
1721 void ip6_flush_pending_frames(struct sock *sk) in ip6_flush_pending_frames() argument
1723 __ip6_flush_pending_frames(sk, &sk->sk_write_queue, in ip6_flush_pending_frames()
1724 &inet_sk(sk)->cork, &inet6_sk(sk)->cork); in ip6_flush_pending_frames()
1728 struct sk_buff *ip6_make_skb(struct sock *sk, in ip6_make_skb() argument
1752 err = ip6_setup_cork(sk, &cork, &v6_cork, hlimit, tclass, opt, rt, fl6); in ip6_make_skb()
1757 dontfrag = inet6_sk(sk)->dontfrag; in ip6_make_skb()
1759 err = __ip6_append_data(sk, fl6, &queue, &cork.base, &v6_cork, in ip6_make_skb()
1764 __ip6_flush_pending_frames(sk, &queue, &cork, &v6_cork); in ip6_make_skb()
1768 return __ip6_make_skb(sk, &queue, &cork, &v6_cork); in ip6_make_skb()