|
@@ -813,6 +813,16 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb,
|
|
skb->nh.iph->saddr = cp->vaddr;
|
|
skb->nh.iph->saddr = cp->vaddr;
|
|
ip_send_check(skb->nh.iph);
|
|
ip_send_check(skb->nh.iph);
|
|
|
|
|
|
|
|
+ /* For policy routing, packets originating from this
|
|
|
|
+ * machine itself may be routed differently to packets
|
|
|
|
+ * passing through. We want this packet to be routed as
|
|
|
|
+ * if it came from this machine itself. So re-compute
|
|
|
|
+ * the routing information.
|
|
|
|
+ */
|
|
|
|
+ if (ip_route_me_harder(pskb, RTN_LOCAL) != 0)
|
|
|
|
+ goto drop;
|
|
|
|
+ skb = *pskb;
|
|
|
|
+
|
|
IP_VS_DBG_PKT(10, pp, skb, 0, "After SNAT");
|
|
IP_VS_DBG_PKT(10, pp, skb, 0, "After SNAT");
|
|
|
|
|
|
ip_vs_out_stats(cp, skb);
|
|
ip_vs_out_stats(cp, skb);
|