Lines Matching refs:skb
42 static bool ip_exceeds_mtu(const struct sk_buff *skb, unsigned int mtu) in ip_exceeds_mtu() argument
44 if (skb->len <= mtu) in ip_exceeds_mtu()
47 if (unlikely((ip_hdr(skb)->frag_off & htons(IP_DF)) == 0)) in ip_exceeds_mtu()
51 if (unlikely(IPCB(skb)->frag_max_size > mtu)) in ip_exceeds_mtu()
54 if (skb->ignore_df) in ip_exceeds_mtu()
57 if (skb_is_gso(skb) && skb_gso_network_seglen(skb) <= mtu) in ip_exceeds_mtu()
64 static int ip_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb) in ip_forward_finish() argument
66 struct ip_options *opt = &(IPCB(skb)->opt); in ip_forward_finish()
69 IP_ADD_STATS_BH(net, IPSTATS_MIB_OUTOCTETS, skb->len); in ip_forward_finish()
72 ip_forward_options(skb); in ip_forward_finish()
74 skb_sender_cpu_clear(skb); in ip_forward_finish()
75 return dst_output(net, sk, skb); in ip_forward_finish()
78 int ip_forward(struct sk_buff *skb) in ip_forward() argument
83 struct ip_options *opt = &(IPCB(skb)->opt); in ip_forward()
87 if (skb->pkt_type != PACKET_HOST) in ip_forward()
90 if (unlikely(skb->sk)) in ip_forward()
93 if (skb_warn_if_lro(skb)) in ip_forward()
96 if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb)) in ip_forward()
99 if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb)) in ip_forward()
102 skb_forward_csum(skb); in ip_forward()
103 net = dev_net(skb->dev); in ip_forward()
110 if (ip_hdr(skb)->ttl <= 1) in ip_forward()
113 if (!xfrm4_route_forward(skb)) in ip_forward()
116 rt = skb_rtable(skb); in ip_forward()
121 IPCB(skb)->flags |= IPSKB_FORWARDED; in ip_forward()
123 if (ip_exceeds_mtu(skb, mtu)) { in ip_forward()
125 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, in ip_forward()
131 if (skb_cow(skb, LL_RESERVED_SPACE(rt->dst.dev)+rt->dst.header_len)) in ip_forward()
133 iph = ip_hdr(skb); in ip_forward()
142 if (IPCB(skb)->flags & IPSKB_DOREDIRECT && !opt->srr && in ip_forward()
143 !skb_sec_path(skb)) in ip_forward()
144 ip_rt_send_redirect(skb); in ip_forward()
146 skb->priority = rt_tos2priority(iph->tos); in ip_forward()
149 net, NULL, skb, skb->dev, rt->dst.dev, in ip_forward()
156 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_SR_FAILED, 0); in ip_forward()
162 icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0); in ip_forward()
164 kfree_skb(skb); in ip_forward()