Lines Matching refs:skb

42 static bool ip_may_fragment(const struct sk_buff *skb)  in ip_may_fragment()  argument
44 return unlikely((ip_hdr(skb)->frag_off & htons(IP_DF)) == 0) || in ip_may_fragment()
45 skb->ignore_df; in ip_may_fragment()
48 static bool ip_exceeds_mtu(const struct sk_buff *skb, unsigned int mtu) in ip_exceeds_mtu() argument
50 if (skb->len <= mtu) in ip_exceeds_mtu()
53 if (skb_is_gso(skb) && skb_gso_network_seglen(skb) <= mtu) in ip_exceeds_mtu()
60 static int ip_forward_finish(struct sock *sk, struct sk_buff *skb) in ip_forward_finish() argument
62 struct ip_options *opt = &(IPCB(skb)->opt); in ip_forward_finish()
64 IP_INC_STATS_BH(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_OUTFORWDATAGRAMS); in ip_forward_finish()
65 IP_ADD_STATS_BH(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_OUTOCTETS, skb->len); in ip_forward_finish()
68 ip_forward_options(skb); in ip_forward_finish()
70 skb_sender_cpu_clear(skb); in ip_forward_finish()
71 return dst_output_sk(sk, skb); in ip_forward_finish()
74 int ip_forward(struct sk_buff *skb) in ip_forward() argument
79 struct ip_options *opt = &(IPCB(skb)->opt); in ip_forward()
82 if (skb->pkt_type != PACKET_HOST) in ip_forward()
85 if (unlikely(skb->sk)) in ip_forward()
88 if (skb_warn_if_lro(skb)) in ip_forward()
91 if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb)) in ip_forward()
94 if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb)) in ip_forward()
97 skb_forward_csum(skb); in ip_forward()
104 if (ip_hdr(skb)->ttl <= 1) in ip_forward()
107 if (!xfrm4_route_forward(skb)) in ip_forward()
110 rt = skb_rtable(skb); in ip_forward()
115 IPCB(skb)->flags |= IPSKB_FORWARDED; in ip_forward()
117 if (!ip_may_fragment(skb) && ip_exceeds_mtu(skb, mtu)) { in ip_forward()
119 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, in ip_forward()
125 if (skb_cow(skb, LL_RESERVED_SPACE(rt->dst.dev)+rt->dst.header_len)) in ip_forward()
127 iph = ip_hdr(skb); in ip_forward()
136 if (IPCB(skb)->flags & IPSKB_DOREDIRECT && !opt->srr && in ip_forward()
137 !skb_sec_path(skb)) in ip_forward()
138 ip_rt_send_redirect(skb); in ip_forward()
140 skb->priority = rt_tos2priority(iph->tos); in ip_forward()
142 return NF_HOOK(NFPROTO_IPV4, NF_INET_FORWARD, NULL, skb, in ip_forward()
143 skb->dev, rt->dst.dev, ip_forward_finish); in ip_forward()
149 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_SR_FAILED, 0); in ip_forward()
154 IP_INC_STATS_BH(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_INHDRERRORS); in ip_forward()
155 icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0); in ip_forward()
157 kfree_skb(skb); in ip_forward()