ip_finish_output2);
}
-int ip_mc_output(struct sk_buff *skb)
+int ip_mc_output(struct sk_buff **pskb)
{
+ struct sk_buff *skb = *pskb;
struct sock *sk = skb->sk;
struct rtable *rt = (struct rtable*)skb->dst;
struct net_device *dev = rt->u.dst.dev;
/*
* If the indicated interface is up and running, send the packet.
*/
- IP_INC_STATS(IpOutRequests);
+ IP_INC_STATS(OutRequests);
skb->dev = dev;
skb->protocol = htons(ETH_P_IP);
return ip_finish_output(skb);
}
-int ip_output(struct sk_buff *skb)
+int ip_output(struct sk_buff **pskb)
{
- IP_INC_STATS(IpOutRequests);
+ struct sk_buff *skb = *pskb;
+
+ IP_INC_STATS(OutRequests);
if ((skb->len > dst_pmtu(skb->dst) || skb_shinfo(skb)->frag_list) &&
!skb_shinfo(skb)->tso_size)
dst_output);
no_route:
- IP_INC_STATS(IpOutNoRoutes);
+ IP_INC_STATS(OutNoRoutes);
kfree_skb(skb);
return -EHOSTUNREACH;
}
}
if (err == 0) {
- IP_INC_STATS(IpFragOKs);
+ IP_INC_STATS(FragOKs);
return 0;
}
kfree_skb(frag);
frag = skb;
}
- IP_INC_STATS(IpFragFails);
+ IP_INC_STATS(FragFails);
return err;
}
#ifdef CONFIG_BRIDGE_NETFILTER
/* for bridged IP traffic encapsulated inside f.e. a vlan header,
* we need to make room for the encapsulating header */
- ll_rs = LL_RESERVED_SPACE(rt->u.dst.dev + nf_bridge_pad(skb));
+ ll_rs = LL_RESERVED_SPACE_EXTRA(rt->u.dst.dev, nf_bridge_pad(skb));
mtu -= nf_bridge_pad(skb);
#else
ll_rs = LL_RESERVED_SPACE(rt->u.dst.dev);
* Put this fragment into the sending queue.
*/
- IP_INC_STATS(IpFragCreates);
+ IP_INC_STATS(FragCreates);
iph->tot_len = htons(len + hlen);
goto fail;
}
kfree_skb(skb);
- IP_INC_STATS(IpFragOKs);
+ IP_INC_STATS(FragOKs);
return err;
fail:
kfree_skb(skb);
- IP_INC_STATS(IpFragFails);
+ IP_INC_STATS(FragFails);
return err;
}
error:
inet->cork.length -= length;
- IP_INC_STATS(IpOutDiscards);
+ IP_INC_STATS(OutDiscards);
return err;
}
error:
inet->cork.length -= size;
- IP_INC_STATS(IpOutDiscards);
+ IP_INC_STATS(OutDiscards);
return err;
}
return err;
error:
- IP_INC_STATS(IpOutDiscards);
+ IP_INC_STATS(OutDiscards);
goto out;
}