|
@@ -202,13 +202,11 @@ static inline int ip_finish_output2(struct sk_buff *skb)
|
|
|
|
|
|
static inline int ip_finish_output(struct sk_buff *skb)
|
|
static inline int ip_finish_output(struct sk_buff *skb)
|
|
{
|
|
{
|
|
- struct net_device *dev = skb->dst->dev;
|
|
|
|
-
|
|
|
|
- skb->dev = dev;
|
|
|
|
- skb->protocol = htons(ETH_P_IP);
|
|
|
|
-
|
|
|
|
- return NF_HOOK(PF_INET, NF_IP_POST_ROUTING, skb, NULL, dev,
|
|
|
|
- ip_finish_output2);
|
|
|
|
|
|
+ if (skb->len > dst_mtu(skb->dst) &&
|
|
|
|
+ !(skb_shinfo(skb)->ufo_size || skb_shinfo(skb)->tso_size))
|
|
|
|
+ return ip_fragment(skb, ip_finish_output2);
|
|
|
|
+ else
|
|
|
|
+ return ip_finish_output2(skb);
|
|
}
|
|
}
|
|
|
|
|
|
int ip_mc_output(struct sk_buff *skb)
|
|
int ip_mc_output(struct sk_buff *skb)
|
|
@@ -265,21 +263,21 @@ int ip_mc_output(struct sk_buff *skb)
|
|
newskb->dev, ip_dev_loopback_xmit);
|
|
newskb->dev, ip_dev_loopback_xmit);
|
|
}
|
|
}
|
|
|
|
|
|
- if (skb->len > dst_mtu(&rt->u.dst))
|
|
|
|
- return ip_fragment(skb, ip_finish_output);
|
|
|
|
- else
|
|
|
|
- return ip_finish_output(skb);
|
|
|
|
|
|
+ return NF_HOOK(PF_INET, NF_IP_POST_ROUTING, skb, NULL, skb->dev,
|
|
|
|
+ ip_finish_output);
|
|
}
|
|
}
|
|
|
|
|
|
int ip_output(struct sk_buff *skb)
|
|
int ip_output(struct sk_buff *skb)
|
|
{
|
|
{
|
|
|
|
+ struct net_device *dev = skb->dst->dev;
|
|
|
|
+
|
|
IP_INC_STATS(IPSTATS_MIB_OUTREQUESTS);
|
|
IP_INC_STATS(IPSTATS_MIB_OUTREQUESTS);
|
|
|
|
|
|
- if (skb->len > dst_mtu(skb->dst) &&
|
|
|
|
- !(skb_shinfo(skb)->ufo_size || skb_shinfo(skb)->tso_size))
|
|
|
|
- return ip_fragment(skb, ip_finish_output);
|
|
|
|
- else
|
|
|
|
- return ip_finish_output(skb);
|
|
|
|
|
|
+ skb->dev = dev;
|
|
|
|
+ skb->protocol = htons(ETH_P_IP);
|
|
|
|
+
|
|
|
|
+ return NF_HOOK(PF_INET, NF_IP_POST_ROUTING, skb, NULL, dev,
|
|
|
|
+ ip_finish_output);
|
|
}
|
|
}
|
|
|
|
|
|
int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
|
|
int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
|