Lines Matching refs:sk
60 static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *skb) in ip6_finish_output2() argument
74 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) && in ip6_finish_output2()
86 net, sk, newskb, NULL, newskb->dev, in ip6_finish_output2()
124 static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb) in ip6_finish_output() argument
129 return ip6_fragment(net, sk, skb, ip6_finish_output2); in ip6_finish_output()
131 return ip6_finish_output2(net, sk, skb); in ip6_finish_output()
134 int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb) in ip6_output() argument
146 net, sk, skb, NULL, dev, in ip6_output()
157 int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6, in ip6_xmit() argument
160 struct net *net = sock_net(sk); in ip6_xmit()
161 const struct ipv6_pinfo *np = inet6_sk(sk); in ip6_xmit()
193 skb_set_owner_w(skb, (struct sock *)sk); in ip6_xmit()
224 skb->priority = sk->sk_priority; in ip6_xmit()
225 skb->mark = sk->sk_mark; in ip6_xmit()
235 net, (struct sock *)sk, skb, NULL, dst->dev, in ip6_xmit()
243 ipv6_local_error((struct sock *)sk, EMSGSIZE, fl6, mtu); in ip6_xmit()
258 struct sock *sk = ra->sk; in ip6_call_ra_chain() local
259 if (sk && ra->sel == sel && in ip6_call_ra_chain()
260 (!sk->sk_bound_dev_if || in ip6_call_ra_chain()
261 sk->sk_bound_dev_if == skb->dev->ifindex)) { in ip6_call_ra_chain()
267 last = sk; in ip6_call_ra_chain()
332 static inline int ip6_forward_finish(struct net *net, struct sock *sk, in ip6_forward_finish() argument
336 return dst_output(net, sk, skb); in ip6_forward_finish()
392 if (unlikely(skb->sk)) in ip6_forward()
559 int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb, in ip6_fragment() argument
564 struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ? in ip6_fragment()
565 inet6_sk(skb->sk) : NULL; in ip6_fragment()
632 BUG_ON(frag->sk); in ip6_fragment()
633 if (skb->sk) { in ip6_fragment()
634 frag->sk = skb->sk; in ip6_fragment()
698 err = output(net, sk, skb); in ip6_fragment()
731 frag2->sk = NULL; in ip6_fragment()
788 if (skb->sk) in ip6_fragment()
789 skb_set_owner_w(frag, skb->sk); in ip6_fragment()
822 err = output(net, sk, frag); in ip6_fragment()
835 if (skb->sk && dst_allfrag(skb_dst(skb))) in ip6_fragment()
836 sk_nocaps_add(skb->sk, NETIF_F_GSO_MASK); in ip6_fragment()
857 static struct dst_entry *ip6_sk_dst_check(struct sock *sk, in ip6_sk_dst_check() argument
861 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_sk_dst_check()
904 static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk, in ip6_dst_lookup_tail() argument
928 *dst = ip6_route_output(net, sk, fl6); in ip6_dst_lookup_tail()
931 sk ? inet6_sk(sk)->srcprefs : 0, in ip6_dst_lookup_tail()
950 *dst = ip6_route_output_flags(net, sk, fl6, flags); in ip6_dst_lookup_tail()
992 *dst = ip6_route_output(net, sk, &fl_gw6); in ip6_dst_lookup_tail()
1020 int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst, in ip6_dst_lookup() argument
1024 return ip6_dst_lookup_tail(net, sk, dst, fl6); in ip6_dst_lookup()
1039 struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6, in ip6_dst_lookup_flow() argument
1045 err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6); in ip6_dst_lookup_flow()
1053 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); in ip6_dst_lookup_flow()
1071 struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, in ip6_sk_dst_lookup_flow() argument
1074 struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); in ip6_sk_dst_lookup_flow()
1076 dst = ip6_sk_dst_check(sk, dst, fl6); in ip6_sk_dst_lookup_flow()
1078 dst = ip6_dst_lookup_flow(sk, fl6, final_dst); in ip6_sk_dst_lookup_flow()
1084 static inline int ip6_ufo_append_data(struct sock *sk, in ip6_ufo_append_data() argument
1102 skb = sock_alloc_send_skb(sk, in ip6_ufo_append_data()
1135 skb_shinfo(skb)->ip6_frag_id = ipv6_select_ident(sock_net(sk), in ip6_ufo_append_data()
1140 return skb_append_datato_frags(sk, skb, getfrag, from, in ip6_ufo_append_data()
1180 static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork, in ip6_setup_cork() argument
1185 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_setup_cork()
1195 v6_cork->opt = kzalloc(opt->tot_len, sk->sk_allocation); in ip6_setup_cork()
1204 sk->sk_allocation); in ip6_setup_cork()
1209 sk->sk_allocation); in ip6_setup_cork()
1214 sk->sk_allocation); in ip6_setup_cork()
1219 sk->sk_allocation); in ip6_setup_cork()
1248 static int __ip6_append_data(struct sock *sk, in __ip6_append_data() argument
1297 (sk->sk_protocol == IPPROTO_UDP || in __ip6_append_data()
1298 sk->sk_protocol == IPPROTO_RAW)) { in __ip6_append_data()
1299 ipv6_local_rxpmtu(sk, fl6, mtu - headersize + in __ip6_append_data()
1304 if (ip6_sk_ignore_df(sk)) in __ip6_append_data()
1311 ipv6_local_error(sk, EMSGSIZE, fl6, in __ip6_append_data()
1320 if (transhdrlen && sk->sk_protocol == IPPROTO_UDP && in __ip6_append_data()
1327 if (sk->sk_type == SOCK_DGRAM || sk->sk_type == SOCK_RAW) { in __ip6_append_data()
1328 sock_tx_timestamp(sk, &tx_flags); in __ip6_append_data()
1330 sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID) in __ip6_append_data()
1331 tskey = sk->sk_tskey++; in __ip6_append_data()
1353 (sk->sk_protocol == IPPROTO_UDP) && in __ip6_append_data()
1355 (sk->sk_type == SOCK_DGRAM) && !udp_get_no_check6_tx(sk)) { in __ip6_append_data()
1356 err = ip6_ufo_append_data(sk, queue, getfrag, from, length, in __ip6_append_data()
1428 skb = sock_alloc_send_skb(sk, in __ip6_append_data()
1433 if (atomic_read(&sk->sk_wmem_alloc) <= in __ip6_append_data()
1434 2 * sk->sk_sndbuf) in __ip6_append_data()
1435 skb = sock_wmalloc(sk, in __ip6_append_data()
1437 sk->sk_allocation); in __ip6_append_data()
1518 if (!sk_page_frag_refill(sk, pfrag)) in __ip6_append_data()
1543 atomic_add(copy, &sk->sk_wmem_alloc); in __ip6_append_data()
1555 IP6_INC_STATS(sock_net(sk), rt->rt6i_idev, IPSTATS_MIB_OUTDISCARDS); in __ip6_append_data()
1559 int ip6_append_data(struct sock *sk, in ip6_append_data() argument
1566 struct inet_sock *inet = inet_sk(sk); in ip6_append_data()
1567 struct ipv6_pinfo *np = inet6_sk(sk); in ip6_append_data()
1573 if (skb_queue_empty(&sk->sk_write_queue)) { in ip6_append_data()
1577 err = ip6_setup_cork(sk, &inet->cork, &np->cork, hlimit, in ip6_append_data()
1590 return __ip6_append_data(sk, fl6, &sk->sk_write_queue, &inet->cork.base, in ip6_append_data()
1591 &np->cork, sk_page_frag(sk), getfrag, in ip6_append_data()
1616 struct sk_buff *__ip6_make_skb(struct sock *sk, in __ip6_make_skb() argument
1624 struct ipv6_pinfo *np = inet6_sk(sk); in __ip6_make_skb()
1625 struct net *net = sock_net(sk); in __ip6_make_skb()
1648 tmp_skb->sk = NULL; in __ip6_make_skb()
1652 skb->ignore_df = ip6_sk_ignore_df(sk); in __ip6_make_skb()
1673 skb->priority = sk->sk_priority; in __ip6_make_skb()
1674 skb->mark = sk->sk_mark; in __ip6_make_skb()
1692 struct net *net = sock_net(skb->sk); in ip6_send_skb()
1696 err = ip6_local_out(net, skb->sk, skb); in ip6_send_skb()
1708 int ip6_push_pending_frames(struct sock *sk) in ip6_push_pending_frames() argument
1712 skb = ip6_finish_skb(sk); in ip6_push_pending_frames()
1720 static void __ip6_flush_pending_frames(struct sock *sk, in __ip6_flush_pending_frames() argument
1729 IP6_INC_STATS(sock_net(sk), ip6_dst_idev(skb_dst(skb)), in __ip6_flush_pending_frames()
1737 void ip6_flush_pending_frames(struct sock *sk) in ip6_flush_pending_frames() argument
1739 __ip6_flush_pending_frames(sk, &sk->sk_write_queue, in ip6_flush_pending_frames()
1740 &inet_sk(sk)->cork, &inet6_sk(sk)->cork); in ip6_flush_pending_frames()
1744 struct sk_buff *ip6_make_skb(struct sock *sk, in ip6_make_skb() argument
1768 err = ip6_setup_cork(sk, &cork, &v6_cork, hlimit, tclass, opt, rt, fl6); in ip6_make_skb()
1773 dontfrag = inet6_sk(sk)->dontfrag; in ip6_make_skb()
1775 err = __ip6_append_data(sk, fl6, &queue, &cork.base, &v6_cork, in ip6_make_skb()
1780 __ip6_flush_pending_frames(sk, &queue, &cork, &v6_cork); in ip6_make_skb()
1784 return __ip6_make_skb(sk, &queue, &cork, &v6_cork); in ip6_make_skb()