On 2019/6/15 9:00, David Ahern wrote:
> On 6/14/19 10:55 AM, luoshijie wrote:
>> From: Shijie Luo <luoshij...@huawei.com>
>>
>> Suppose we have two interfaces eth0 and eth1 in two hosts, follow 
>> the same steps in the two hosts:
>> # sysctl -w net.ipv4.conf.eth1.route_localnet=1
>> # sysctl -w net.ipv4.conf.eth1.arp_announce=2
>> # ip route del 127.0.0.0/8 dev lo table local
>> and then set ip to eth1 in host1 like:
>> # ifconfig eth1 127.25.3.4/24
>> set ip to eth2 in host2 and ping host1:
>> # ifconfig eth1 127.25.3.14/24
>> # ping -I eth1 127.25.3.4
>> Well, host2 cannot connect to host1.
> 
> Since you already have the commands, create a test script in
> tools/testing/selftests/net that uses network namespaces for host1 and
> host2 and demonstrates the problem. There quite a few examples in that
> directory to use as a template. eg., see icmp_redirect.sh
>
Thanks for your advice, I will follow it to add a testcase to demonstrate the 
problem.

>> diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
>> index ea4bd8a52..325fafd4b 100644
>> --- a/net/ipv4/devinet.c
>> +++ b/net/ipv4/devinet.c
>> @@ -1249,14 +1249,19 @@ __be32 inet_select_addr(const struct net_device 
>> *dev, __be32 dst, int scope)
>>      struct in_device *in_dev;
>>      struct net *net = dev_net(dev);
>>      int master_idx;
>> +    unsigned char localnet_scope = RT_SCOPE_HOST;
> 
> net code uses reverse xmas tree ordering. ie., move that up.
> 
>>  
>>      rcu_read_lock();
>>      in_dev = __in_dev_get_rcu(dev);
>>      if (!in_dev)
>>              goto no_in_dev;
>>  
>> +    if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev))) {
>> +            localnet_scope = RT_SCOPE_LINK;
>> +    }
>> +
> 
> brackets are not needed.
> 
> 
>>      for_primary_ifa(in_dev) {
>> -            if (ifa->ifa_scope > scope)
>> +            if (min(ifa->ifa_scope, localnet_scope) > scope)
>>                      continue;
>>              if (!dst || inet_ifa_match(dst, ifa)) {
>>                      addr = ifa->ifa_local;
>>
> 
> 
> .
> 
Thanks for your reply and I really appreciate your advice very much.
I will soon add the testcase and submit the V2 patch.

Reply via email to