diff options
| -rw-r--r-- | net/ipv4/arp.c | 5 | ||||
| -rw-r--r-- | net/ipv4/route.c | 4 | 
2 files changed, 4 insertions, 5 deletions
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 9eb6d3ab297..46edf1c32a4 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c @@ -835,9 +835,8 @@ static int arp_process(struct sk_buff *skb)  			}  			goto out;  		} else if (IN_DEV_FORWARD(in_dev)) { -			if ((rt->rt_flags&RTCF_DNAT) || -			    (addr_type == RTN_UNICAST  && rt->u.dst.dev != dev && -			     (arp_fwd_proxy(in_dev, rt) || pneigh_lookup(&arp_tbl, &init_net, &tip, dev, 0)))) { +			    if (addr_type == RTN_UNICAST  && rt->u.dst.dev != dev && +			     (arp_fwd_proxy(in_dev, rt) || pneigh_lookup(&arp_tbl, &init_net, &tip, dev, 0))) {  				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);  				if (n)  					neigh_release(n); diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 933b093721e..78c4ce424a6 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1768,7 +1768,7 @@ static inline int __mkroute_input(struct sk_buff *skb,  	if (err)  		flags |= RTCF_DIRECTSRC; -	if (out_dev == in_dev && err && !(flags & (RTCF_NAT | RTCF_MASQ)) && +	if (out_dev == in_dev && err && !(flags & RTCF_MASQ) &&  	    (IN_DEV_SHARED_MEDIA(out_dev) ||  	     inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res))))  		flags |= RTCF_DOREDIRECT; @@ -1777,7 +1777,7 @@ static inline int __mkroute_input(struct sk_buff *skb,  		/* Not IP (i.e. ARP). Do not create route, if it is  		 * invalid for proxy arp. DNAT routes are always valid.  		 */ -		if (out_dev == in_dev && !(flags & RTCF_DNAT)) { +		if (out_dev == in_dev) {  			err = -EINVAL;  			goto cleanup;  		}  |