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); |
