diff options
-rw-r--r-- | net/ipv4/ipvs/ip_vs_core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/ipv4/ipvs/ip_vs_core.c b/net/ipv4/ipvs/ip_vs_core.c index 6dee03935f78..1445bb47fea4 100644 --- a/net/ipv4/ipvs/ip_vs_core.c +++ b/net/ipv4/ipvs/ip_vs_core.c | |||
@@ -813,6 +813,16 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, | |||
813 | skb->nh.iph->saddr = cp->vaddr; | 813 | skb->nh.iph->saddr = cp->vaddr; |
814 | ip_send_check(skb->nh.iph); | 814 | ip_send_check(skb->nh.iph); |
815 | 815 | ||
816 | /* For policy routing, packets originating from this | ||
817 | * machine itself may be routed differently to packets | ||
818 | * passing through. We want this packet to be routed as | ||
819 | * if it came from this machine itself. So re-compute | ||
820 | * the routing information. | ||
821 | */ | ||
822 | if (ip_route_me_harder(pskb, RTN_LOCAL) != 0) | ||
823 | goto drop; | ||
824 | skb = *pskb; | ||
825 | |||
816 | IP_VS_DBG_PKT(10, pp, skb, 0, "After SNAT"); | 826 | IP_VS_DBG_PKT(10, pp, skb, 0, "After SNAT"); |
817 | 827 | ||
818 | ip_vs_out_stats(cp, skb); | 828 | ip_vs_out_stats(cp, skb); |