Lines Matching defs:skb

43 static bool ip_exceeds_mtu(const struct sk_buff *skb, unsigned int mtu)
45 if (skb->len <= mtu)
48 if (unlikely((ip_hdr(skb)->frag_off & htons(IP_DF)) == 0))
52 if (unlikely(IPCB(skb)->frag_max_size > mtu))
55 if (skb->ignore_df)
58 if (skb_is_gso(skb) && skb_gso_validate_network_len(skb, mtu))
65 static int ip_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
67 struct ip_options *opt = &(IPCB(skb)->opt);
70 __IP_ADD_STATS(net, IPSTATS_MIB_OUTOCTETS, skb->len);
73 if (skb->offload_l3_fwd_mark) {
74 consume_skb(skb);
80 ip_forward_options(skb);
82 skb->tstamp = 0;
83 return dst_output(net, sk, skb);
86 int ip_forward(struct sk_buff *skb)
91 struct ip_options *opt = &(IPCB(skb)->opt);
95 if (skb->pkt_type != PACKET_HOST)
98 if (unlikely(skb->sk))
101 if (skb_warn_if_lro(skb))
104 if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb))
107 if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb))
110 skb_forward_csum(skb);
111 net = dev_net(skb->dev);
118 if (ip_hdr(skb)->ttl <= 1)
121 if (!xfrm4_route_forward(skb))
124 rt = skb_rtable(skb);
129 IPCB(skb)->flags |= IPSKB_FORWARDED;
131 if (ip_exceeds_mtu(skb, mtu)) {
133 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
139 if (skb_cow(skb, LL_RESERVED_SPACE(rt->dst.dev)+rt->dst.header_len))
141 iph = ip_hdr(skb);
143 /* Decrease ttl after skb cow done */
150 if (IPCB(skb)->flags & IPSKB_DOREDIRECT && !opt->srr &&
151 !skb_sec_path(skb))
152 ip_rt_send_redirect(skb);
155 skb->priority = rt_tos2priority(iph->tos);
158 net, NULL, skb, skb->dev, rt->dst.dev,
165 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_SR_FAILED, 0);
171 icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
173 kfree_skb(skb);