Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-27 Thread Stephen Hemminger
On Tue, 27 Mar 2018 19:33:28 +0200
Alexander Zubkov  wrote:

> master before merging revert + my recent patch (1) should work. Or you mean 
> to prepare patch to change new master to desired state? I can do it.
> 
> 1) 
> https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/patch/?id=7696f1097f79be2ce5984a8a16103fd17391cac2
> 
> 27.03.2018, 19:00, "Stephen Hemminger" :
> > On Tue, 27 Mar 2018 18:29:31 +0200
> > Alexander Zubkov  wrote:
> >  
> >>  Hi Stephen,
> >>
> >>  Looks like the new patch was applied after the revert of original patch 
> >> and fix patch for 4.15 branch. Which is not correct and I did not test it. 
> >> This is how patches were designed:
> >>  1) your revert patch - rolls back 4.15 branch to old behaviour by 
> >> reverting the original patch
> >>  2) my patch for 4.15 - fixes problem is 4.15 branch, it does not require 
> >> revert patch, it is an alternative solution for the problem, it is 
> >> designed solely for version 4.15
> >>  3) my patch for master - fixes problem, it requires neither revert patch 
> >> nor my patch for 4.15, it is standalone patch designed to do things right 
> >> in master branch
> >>
> >>  27.03.2018, 18:01, "Stephen Hemminger" :  
> >>  > On Wed, 14 Mar 2018 21:26:40 +0100
> >>  > Alexander Zubkov  wrote:
> >>  >  
> >>  >>  Hello,
> >>  >>
> >>  >>  For example, it can be fixed in such way (patch is below):
> >>  >>  - split handling of default and all/any
> >>  >>  - set needed attributes in get_addr: PREFIXLEN_SPECIFIED flag for 
> >> default
> >>  >>  - and AF_UNSPEC for all/any
> >>  >>  In this case "ip route show default" shows only default route and "ip
> >>  >>  route show all" shows all routes. And both also work when family (-4 
> >> or
> >>  >>  -6) is specified.
> >>  >>  Serhey, does it goes in line with what you wanted to achieve? Because 
> >> I
> >>  >>  do not know - may be there are reasons why all/any should be provided
> >>  >>  with specific family. If you think this solution is suitable, I'll do
> >>  >>  some additional tests and package the patch in a proper way for this
> >>  >>  mailing list.
> >>  >>  And I'm unsure if check for AF_DECnet and AF_MPLS should be kept in 
> >> both
> >>  >>  branches. May be someone have some additional thoughts on that?  
> >>  >
> >>  > I applied this to master.
> >>  >
> >>  > We can work on the other cases after that.  
> >
> > Please send the update back to what works.  

Make patches against current master.
For visible repositories, I prefer to only move forward and not rollback.
So you can send a revert patch than new code if that is easier.


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-27 Thread Alexander Zubkov
master before merging revert + my recent patch (1) should work. Or you mean to 
prepare patch to change new master to desired state? I can do it.

1) 
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/patch/?id=7696f1097f79be2ce5984a8a16103fd17391cac2

27.03.2018, 19:00, "Stephen Hemminger" :
> On Tue, 27 Mar 2018 18:29:31 +0200
> Alexander Zubkov  wrote:
>
>>  Hi Stephen,
>>
>>  Looks like the new patch was applied after the revert of original patch and 
>> fix patch for 4.15 branch. Which is not correct and I did not test it. This 
>> is how patches were designed:
>>  1) your revert patch - rolls back 4.15 branch to old behaviour by reverting 
>> the original patch
>>  2) my patch for 4.15 - fixes problem is 4.15 branch, it does not require 
>> revert patch, it is an alternative solution for the problem, it is designed 
>> solely for version 4.15
>>  3) my patch for master - fixes problem, it requires neither revert patch 
>> nor my patch for 4.15, it is standalone patch designed to do things right in 
>> master branch
>>
>>  27.03.2018, 18:01, "Stephen Hemminger" :
>>  > On Wed, 14 Mar 2018 21:26:40 +0100
>>  > Alexander Zubkov  wrote:
>>  >
>>  >>  Hello,
>>  >>
>>  >>  For example, it can be fixed in such way (patch is below):
>>  >>  - split handling of default and all/any
>>  >>  - set needed attributes in get_addr: PREFIXLEN_SPECIFIED flag for 
>> default
>>  >>  - and AF_UNSPEC for all/any
>>  >>  In this case "ip route show default" shows only default route and "ip
>>  >>  route show all" shows all routes. And both also work when family (-4 or
>>  >>  -6) is specified.
>>  >>  Serhey, does it goes in line with what you wanted to achieve? Because I
>>  >>  do not know - may be there are reasons why all/any should be provided
>>  >>  with specific family. If you think this solution is suitable, I'll do
>>  >>  some additional tests and package the patch in a proper way for this
>>  >>  mailing list.
>>  >>  And I'm unsure if check for AF_DECnet and AF_MPLS should be kept in both
>>  >>  branches. May be someone have some additional thoughts on that?
>>  >
>>  > I applied this to master.
>>  >
>>  > We can work on the other cases after that.
>
> Please send the update back to what works.


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-27 Thread Alexander Zubkov
Hi Stephen,

Looks like the new patch was applied after the revert of original patch and fix 
patch for 4.15 branch. Which is not correct and I did not test it. This is how 
patches were designed:
1) your revert patch - rolls back 4.15 branch to old behaviour by reverting the 
original patch
2) my patch for 4.15 - fixes problem is 4.15 branch, it does not require revert 
patch, it is an alternative solution for the problem, it is designed solely for 
version 4.15
3) my patch for master - fixes problem, it requires neither revert patch nor my 
patch for 4.15, it is standalone patch designed to do things right in master 
branch

27.03.2018, 18:01, "Stephen Hemminger" :
> On Wed, 14 Mar 2018 21:26:40 +0100
> Alexander Zubkov  wrote:
>
>>  Hello,
>>
>>  For example, it can be fixed in such way (patch is below):
>>  - split handling of default and all/any
>>  - set needed attributes in get_addr: PREFIXLEN_SPECIFIED flag for default
>>  - and AF_UNSPEC for all/any
>>  In this case "ip route show default" shows only default route and "ip
>>  route show all" shows all routes. And both also work when family (-4 or
>>  -6) is specified.
>>  Serhey, does it goes in line with what you wanted to achieve? Because I
>>  do not know - may be there are reasons why all/any should be provided
>>  with specific family. If you think this solution is suitable, I'll do
>>  some additional tests and package the patch in a proper way for this
>>  mailing list.
>>  And I'm unsure if check for AF_DECnet and AF_MPLS should be kept in both
>>  branches. May be someone have some additional thoughts on that?
>
> I applied this to master.
>
> We can work on the other cases after that.


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-27 Thread Stephen Hemminger
On Tue, 27 Mar 2018 18:29:31 +0200
Alexander Zubkov  wrote:

> Hi Stephen,
> 
> Looks like the new patch was applied after the revert of original patch and 
> fix patch for 4.15 branch. Which is not correct and I did not test it. This 
> is how patches were designed:
> 1) your revert patch - rolls back 4.15 branch to old behaviour by reverting 
> the original patch
> 2) my patch for 4.15 - fixes problem is 4.15 branch, it does not require 
> revert patch, it is an alternative solution for the problem, it is designed 
> solely for version 4.15
> 3) my patch for master - fixes problem, it requires neither revert patch nor 
> my patch for 4.15, it is standalone patch designed to do things right in 
> master branch
> 
> 27.03.2018, 18:01, "Stephen Hemminger" :
> > On Wed, 14 Mar 2018 21:26:40 +0100
> > Alexander Zubkov  wrote:
> >  
> >>  Hello,
> >>
> >>  For example, it can be fixed in such way (patch is below):
> >>  - split handling of default and all/any
> >>  - set needed attributes in get_addr: PREFIXLEN_SPECIFIED flag for default
> >>  - and AF_UNSPEC for all/any
> >>  In this case "ip route show default" shows only default route and "ip
> >>  route show all" shows all routes. And both also work when family (-4 or
> >>  -6) is specified.
> >>  Serhey, does it goes in line with what you wanted to achieve? Because I
> >>  do not know - may be there are reasons why all/any should be provided
> >>  with specific family. If you think this solution is suitable, I'll do
> >>  some additional tests and package the patch in a proper way for this
> >>  mailing list.
> >>  And I'm unsure if check for AF_DECnet and AF_MPLS should be kept in both
> >>  branches. May be someone have some additional thoughts on that?  
> >
> > I applied this to master.
> >
> > We can work on the other cases after that.  

Please send the update back to what works.


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-27 Thread Stephen Hemminger
On Wed, 14 Mar 2018 21:26:40 +0100
Alexander Zubkov  wrote:

> Hello,
> 
> For example, it can be fixed in such way (patch is below):
> - split handling of default and all/any
> - set needed attributes in get_addr: PREFIXLEN_SPECIFIED flag for default
> - and AF_UNSPEC for all/any
> In this case "ip route show default" shows only default route and "ip 
> route show all" shows all routes. And both also work when family (-4 or 
> -6) is specified.
> Serhey, does it goes in line with what you wanted to achieve? Because I 
> do not know - may be there are reasons why all/any should be provided 
> with specific family. If you think this solution is suitable, I'll do 
> some additional tests and package the patch in a proper way for this 
> mailing list.
> And I'm unsure if check for AF_DECnet and AF_MPLS should be kept in both 
> branches. May be someone have some additional thoughts on that?
> 

I applied this to master.

We can work on the other cases after that.




Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-14 Thread Alexander Zubkov

Hello,

For example, it can be fixed in such way (patch is below):
- split handling of default and all/any
- set needed attributes in get_addr: PREFIXLEN_SPECIFIED flag for default
- and AF_UNSPEC for all/any
In this case "ip route show default" shows only default route and "ip 
route show all" shows all routes. And both also work when family (-4 or 
-6) is specified.
Serhey, does it goes in line with what you wanted to achieve? Because I 
do not know - may be there are reasons why all/any should be provided 
with specific family. If you think this solution is suitable, I'll do 
some additional tests and package the patch in a proper way for this 
mailing list.
And I'm unsure if check for AF_DECnet and AF_MPLS should be kept in both 
branches. May be someone have some additional thoughts on that?


--- a/lib/utils.c
+++ b/lib/utils.c
@@ -560,14 +560,23 @@ static int __get_addr_1(inet_prefix *addr, const 
char *name, int family)

 {
memset(addr, 0, sizeof(*addr));

-   if (strcmp(name, "default") == 0 ||
-   strcmp(name, "all") == 0 ||
-   strcmp(name, "any") == 0) {
+   if (strcmp(name, "default") == 0) {
if ((family == AF_DECnet) || (family == AF_MPLS))
return -1;
addr->family = (family != AF_UNSPEC) ? family : AF_INET;
addr->bytelen = af_byte_len(addr->family);
addr->bitlen = -2;
+   addr->flags |= PREFIXLEN_SPECIFIED;
+   return 0;
+   }
+
+   if (strcmp(name, "all") == 0 ||
+   strcmp(name, "any") == 0) {
+   if ((family == AF_DECnet) || (family == AF_MPLS))
+   return -1;
+   addr->family = AF_UNSPEC;
+   addr->bytelen = 0;
+   addr->bitlen = -2;
return 0;
}

@@ -695,7 +704,7 @@ int get_prefix_1(inet_prefix *dst, char *arg, int 
family)


bitlen = af_bit_len(dst->family);

-   flags = PREFIXLEN_SPECIFIED;
+   flags = 0;
if (slash) {
unsigned int plen;

@@ -706,12 +715,11 @@ int get_prefix_1(inet_prefix *dst, char *arg, int 
family)

if (plen > bitlen)
return -1;

+   flags |= PREFIXLEN_SPECIFIED;
bitlen = plen;
} else {
if (dst->bitlen == -2)
bitlen = 0;
-   else
-   flags = 0;
}

dst->flags |= flags;


On 14.03.2018 09:59, Alexander Zubkov wrote:

Hello,

There was a series of patches by Serhey and specifically this one:
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=93fa12418dc6f5943692250244be303bb162175b

It drops handling of special prefix names in get_prefix_1(), and in 
get_addr_1() they always receive family and bytelen. But as I unerstand for any 
case it was important to keep it with unspecified family for further filtering. 
As I do not know what is the global idea, I want to discuss it. Because there 
are options depending on how and where we want to handle those special names. 
Like keep unspecified family or change filtering logic.

I have added Serhey Popovych in the recepients, so he can give some ideas on 
what his aim is and help choose better solution.

13.03.2018, 21:12, "Alexander Zubkov" :

Hi,

I just realized that you need patch for v4.15.0, which is easier to do.
I'll send it as separate message now. I will make patch for the master
branch, but later.

On 13.03.2018 13:02, Luca Boccassi wrote:

  On Tue, 2018-03-13 at 12:05 +0100, Alexander Zubkov wrote:

  Hello again,

  The fun thing is that before the commit "ip route ls all" showed all
  routes, but "ip -[4|6] route ls all" showed only default. So it was
  broken too, but in other way.
  I see parsing of prefix was changed since my patch. So I need several
  days to propose fix. I think if "ip route ls [all|any]" shows all
  routes and "ip route ls default" shows only default, everybody will
  be happy with that?


  Hi,

  My only concern is that behaviour of existing commands that have been
  in releases is not changed, otherwise I get bugs raised :-)

  Thank you for your work!


  13.03.2018, 09:46, "Alexander Zubkov" :

  Hello.

  May be the better way would be to change how "all"/"any" argument
  behaves? My original concern was about "default" only. I agree too,
  that "all" or "any" should work for all routes. But not for the
  default.

  12.03.2018, 22:37, "Luca Boccassi" :

    On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:

 This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.

 Debian maintainer found that basic command:
 # ip route flush all
 No longer worked as expected which breaks user scripts and
 expectations. It no longer flushed all IPv4 routes.

 Reported-by: Luca Boccassi 
 Signed-off-by: Stephen Hemminger 
 ---
  ip/iproute.c | 65 ++---

Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-14 Thread Alexander Zubkov
Hello,

There was a series of patches by Serhey and specifically this one:
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=93fa12418dc6f5943692250244be303bb162175b

It drops handling of special prefix names in get_prefix_1(), and in 
get_addr_1() they always receive family and bytelen. But as I unerstand for any 
case it was important to keep it with unspecified family for further filtering. 
As I do not know what is the global idea, I want to discuss it. Because there 
are options depending on how and where we want to handle those special names. 
Like keep unspecified family or change filtering logic.

I have added Serhey Popovych in the recepients, so he can give some ideas on 
what his aim is and help choose better solution.

13.03.2018, 21:12, "Alexander Zubkov" :
> Hi,
>
> I just realized that you need patch for v4.15.0, which is easier to do.
> I'll send it as separate message now. I will make patch for the master
> branch, but later.
>
> On 13.03.2018 13:02, Luca Boccassi wrote:
>>  On Tue, 2018-03-13 at 12:05 +0100, Alexander Zubkov wrote:
>>>  Hello again,
>>>
>>>  The fun thing is that before the commit "ip route ls all" showed all
>>>  routes, but "ip -[4|6] route ls all" showed only default. So it was
>>>  broken too, but in other way.
>>>  I see parsing of prefix was changed since my patch. So I need several
>>>  days to propose fix. I think if "ip route ls [all|any]" shows all
>>>  routes and "ip route ls default" shows only default, everybody will
>>>  be happy with that?
>>
>>  Hi,
>>
>>  My only concern is that behaviour of existing commands that have been
>>  in releases is not changed, otherwise I get bugs raised :-)
>>
>>  Thank you for your work!
>>
>>>  13.03.2018, 09:46, "Alexander Zubkov" :
  Hello.

  May be the better way would be to change how "all"/"any" argument
  behaves? My original concern was about "default" only. I agree too,
  that "all" or "any" should work for all routes. But not for the
  default.

  12.03.2018, 22:37, "Luca Boccassi" :
>    On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:
>> This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.
>>
>> Debian maintainer found that basic command:
>> # ip route flush all
>> No longer worked as expected which breaks user scripts and
>> expectations. It no longer flushed all IPv4 routes.
>>
>> Reported-by: Luca Boccassi 
>> Signed-off-by: Stephen Hemminger 
>> ---
>>  ip/iproute.c | 65 ++--
>>  
>> 
>>  lib/utils.c  | 13 
>>  2 files changed, 32 insertions(+), 46 deletions(-)
>
>    Tested-by: Luca Boccassi 
>
>    Thanks, solves the problem. I'll backport it to Debian.
>
>    Alexander, reproducing the issue is quite simple - before that
>  commit,
>    ip route ls all showed all routes, but with the change it
>  started
>    showing only the default table. Same for ip route flush.
>
>    --
>    Kind regards,
>    Luca Boccassi


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-13 Thread Alexander Zubkov

Hi,

I just realized that you need patch for v4.15.0, which is easier to do.
I'll send it as separate message now. I will make patch for the master 
branch, but later.


On 13.03.2018 13:02, Luca Boccassi wrote:

On Tue, 2018-03-13 at 12:05 +0100, Alexander Zubkov wrote:

Hello again,

The fun thing is that before the commit "ip route ls all" showed all
routes, but "ip -[4|6] route ls all" showed only default. So it was
broken too, but in other way.
I see parsing of prefix was changed since my patch. So I need several
days to propose fix. I think if "ip route ls [all|any]" shows all
routes and "ip route ls default" shows only default, everybody will
be happy with that?


Hi,

My only concern is that behaviour of existing commands that have been
in releases is not changed, otherwise I get bugs raised :-)

Thank you for your work!


13.03.2018, 09:46, "Alexander Zubkov" :

Hello.

May be the better way would be to change how "all"/"any" argument
behaves? My original concern was about "default" only. I agree too,
that "all" or "any" should work for all routes. But not for the
default.

12.03.2018, 22:37, "Luca Boccassi" :

  On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:

   This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.

   Debian maintainer found that basic command:
   # ip route flush all
   No longer worked as expected which breaks user scripts and
   expectations. It no longer flushed all IPv4 routes.

   Reported-by: Luca Boccassi 
   Signed-off-by: Stephen Hemminger 
   ---
    ip/iproute.c | 65 ++--

   
    lib/utils.c  | 13 
    2 files changed, 32 insertions(+), 46 deletions(-)


  Tested-by: Luca Boccassi 

  Thanks, solves the problem. I'll backport it to Debian.

  Alexander, reproducing the issue is quite simple - before that
commit,
  ip route ls all showed all routes, but with the change it
started
  showing only the default table. Same for ip route flush.

  --
  Kind regards,
  Luca Boccassi






Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-13 Thread Luca Boccassi
On Tue, 2018-03-13 at 21:12 +0100, Alexander Zubkov wrote:
> Hi,
> 
> I just realized that you need patch for v4.15.0, which is easier to
> do.
> I'll send it as separate message now. I will make patch for the
> master 
> branch, but later.

Thanks but don't worry about 4.15 - Stephen's revert will be enough for
now. I'm going to push 4.16 as soon as it's out anyway, so you can just
do the changes for master if you wish.

> On 13.03.2018 13:02, Luca Boccassi wrote:
> > On Tue, 2018-03-13 at 12:05 +0100, Alexander Zubkov wrote:
> > > Hello again,
> > > 
> > > The fun thing is that before the commit "ip route ls all" showed
> > > all
> > > routes, but "ip -[4|6] route ls all" showed only default. So it
> > > was
> > > broken too, but in other way.
> > > I see parsing of prefix was changed since my patch. So I need
> > > several
> > > days to propose fix. I think if "ip route ls [all|any]" shows all
> > > routes and "ip route ls default" shows only default, everybody
> > > will
> > > be happy with that?
> > 
> > Hi,
> > 
> > My only concern is that behaviour of existing commands that have
> > been
> > in releases is not changed, otherwise I get bugs raised :-)
> > 
> > Thank you for your work!
> > 
> > > 13.03.2018, 09:46, "Alexander Zubkov" :
> > > > Hello.
> > > > 
> > > > May be the better way would be to change how "all"/"any"
> > > > argument
> > > > behaves? My original concern was about "default" only. I agree
> > > > too,
> > > > that "all" or "any" should work for all routes. But not for the
> > > > default.
> > > > 
> > > > 12.03.2018, 22:37, "Luca Boccassi" :
> > > > >   On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:
> > > > > >    This reverts commit
> > > > > > 9135c4d6037ff9f1818507bac0049fc44db8c3d2.
> > > > > > 
> > > > > >    Debian maintainer found that basic command:
> > > > > >    # ip route flush all
> > > > > >    No longer worked as expected which breaks user scripts
> > > > > > and
> > > > > >    expectations. It no longer flushed all IPv4 routes.
> > > > > > 
> > > > > >    Reported-by: Luca Boccassi 
> > > > > >    Signed-off-by: Stephen Hemminger  > > > > > .org>
> > > > > >    ---
> > > > > > ip/iproute.c | 65 ++---
> > > > > > ---
> > > > > > 
> > > > > >    
> > > > > > lib/utils.c  | 13 
> > > > > > 2 files changed, 32 insertions(+), 46 deletions(-)
> > > > > 
> > > > >   Tested-by: Luca Boccassi 
> > > > > 
> > > > >   Thanks, solves the problem. I'll backport it to Debian.
> > > > > 
> > > > >   Alexander, reproducing the issue is quite simple - before
> > > > > that
> > > > > commit,
> > > > >   ip route ls all showed all routes, but with the change it
> > > > > started
> > > > >   showing only the default table. Same for ip route flush.
> > > > > 
> > > > >   --
> > > > >   Kind regards,
> > > > >   Luca Boccassi
> 
> 

-- 
Kind regards,
Luca Boccassi

signature.asc
Description: This is a digitally signed message part


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-13 Thread Luca Boccassi
On Tue, 2018-03-13 at 12:05 +0100, Alexander Zubkov wrote:
> Hello again,
> 
> The fun thing is that before the commit "ip route ls all" showed all
> routes, but "ip -[4|6] route ls all" showed only default. So it was
> broken too, but in other way.
> I see parsing of prefix was changed since my patch. So I need several
> days to propose fix. I think if "ip route ls [all|any]" shows all
> routes and "ip route ls default" shows only default, everybody will
> be happy with that?

Hi,

My only concern is that behaviour of existing commands that have been
in releases is not changed, otherwise I get bugs raised :-)

Thank you for your work!

> 13.03.2018, 09:46, "Alexander Zubkov" :
> > Hello.
> > 
> > May be the better way would be to change how "all"/"any" argument
> > behaves? My original concern was about "default" only. I agree too,
> > that "all" or "any" should work for all routes. But not for the
> > default.
> > 
> > 12.03.2018, 22:37, "Luca Boccassi" :
> > >  On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:
> > > >   This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.
> > > > 
> > > >   Debian maintainer found that basic command:
> > > >   # ip route flush all
> > > >   No longer worked as expected which breaks user scripts and
> > > >   expectations. It no longer flushed all IPv4 routes.
> > > > 
> > > >   Reported-by: Luca Boccassi 
> > > >   Signed-off-by: Stephen Hemminger 
> > > >   ---
> > > >    ip/iproute.c | 65 ++--
> > > > 
> > > >   
> > > >    lib/utils.c  | 13 
> > > >    2 files changed, 32 insertions(+), 46 deletions(-)
> > > 
> > >  Tested-by: Luca Boccassi 
> > > 
> > >  Thanks, solves the problem. I'll backport it to Debian.
> > > 
> > >  Alexander, reproducing the issue is quite simple - before that
> > > commit,
> > >  ip route ls all showed all routes, but with the change it
> > > started
> > >  showing only the default table. Same for ip route flush.
> > > 
> > >  --
> > >  Kind regards,
> > >  Luca Boccassi

-- 
Kind regards,
Luca Boccassi

signature.asc
Description: This is a digitally signed message part


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-13 Thread Alexander Zubkov
Hello again,

The fun thing is that before the commit "ip route ls all" showed all routes, 
but "ip -[4|6] route ls all" showed only default. So it was broken too, but in 
other way.
I see parsing of prefix was changed since my patch. So I need several days to 
propose fix. I think if "ip route ls [all|any]" shows all routes and "ip route 
ls default" shows only default, everybody will be happy with that?

13.03.2018, 09:46, "Alexander Zubkov" :
> Hello.
>
> May be the better way would be to change how "all"/"any" argument behaves? My 
> original concern was about "default" only. I agree too, that "all" or "any" 
> should work for all routes. But not for the default.
>
> 12.03.2018, 22:37, "Luca Boccassi" :
>>  On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:
>>>   This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.
>>>
>>>   Debian maintainer found that basic command:
>>>   # ip route flush all
>>>   No longer worked as expected which breaks user scripts and
>>>   expectations. It no longer flushed all IPv4 routes.
>>>
>>>   Reported-by: Luca Boccassi 
>>>   Signed-off-by: Stephen Hemminger 
>>>   ---
>>>    ip/iproute.c | 65 ++--
>>>   
>>>    lib/utils.c  | 13 
>>>    2 files changed, 32 insertions(+), 46 deletions(-)
>>
>>  Tested-by: Luca Boccassi 
>>
>>  Thanks, solves the problem. I'll backport it to Debian.
>>
>>  Alexander, reproducing the issue is quite simple - before that commit,
>>  ip route ls all showed all routes, but with the change it started
>>  showing only the default table. Same for ip route flush.
>>
>>  --
>>  Kind regards,
>>  Luca Boccassi


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-13 Thread Alexander Zubkov
Hello.

May be the better way would be to change how "all"/"any" argument behaves? My 
original concern was about "default" only. I agree too, that "all" or "any" 
should work for all routes. But not for the default.

12.03.2018, 22:37, "Luca Boccassi" :
> On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:
>>  This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.
>>
>>  Debian maintainer found that basic command:
>>  # ip route flush all
>>  No longer worked as expected which breaks user scripts and
>>  expectations. It no longer flushed all IPv4 routes.
>>
>>  Reported-by: Luca Boccassi 
>>  Signed-off-by: Stephen Hemminger 
>>  ---
>>   ip/iproute.c | 65 ++--
>>  
>>   lib/utils.c  | 13 
>>   2 files changed, 32 insertions(+), 46 deletions(-)
>
> Tested-by: Luca Boccassi 
>
> Thanks, solves the problem. I'll backport it to Debian.
>
> Alexander, reproducing the issue is quite simple - before that commit,
> ip route ls all showed all routes, but with the change it started
> showing only the default table. Same for ip route flush.
>
> --
> Kind regards,
> Luca Boccassi


Re: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-12 Thread Luca Boccassi
On Mon, 2018-03-12 at 14:03 -0700, Stephen Hemminger wrote:
> This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.
> 
> Debian maintainer found that basic command:
>   # ip route flush all
> No longer worked as expected which breaks user scripts and
> expectations. It no longer flushed all IPv4 routes.
> 
> Reported-by: Luca Boccassi 
> Signed-off-by: Stephen Hemminger 
> ---
>  ip/iproute.c | 65 ++--
> 
>  lib/utils.c  | 13 
>  2 files changed, 32 insertions(+), 46 deletions(-)

Tested-by: Luca Boccassi 

Thanks, solves the problem. I'll backport it to Debian.

Alexander, reproducing the issue is quite simple - before that commit,
ip route ls all showed all routes, but with the change it started
showing only the default table. Same for ip route flush.

-- 
Kind regards,
Luca Boccassi

signature.asc
Description: This is a digitally signed message part


[PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes"

2018-03-12 Thread Stephen Hemminger
This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2.

Debian maintainer found that basic command:
# ip route flush all
No longer worked as expected which breaks user scripts and
expectations. It no longer flushed all IPv4 routes.

Reported-by: Luca Boccassi 
Signed-off-by: Stephen Hemminger 
---
 ip/iproute.c | 65 ++--
 lib/utils.c  | 13 
 2 files changed, 32 insertions(+), 46 deletions(-)

diff --git a/ip/iproute.c b/ip/iproute.c
index bf886fda9d76..32c93ed5abd9 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -191,42 +191,20 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr 
**tb, int host_len)
return 0;
if ((filter.tos^r->rtm_tos)&filter.tosmask)
return 0;
-   if (filter.rdst.family) {
-   if (r->rtm_family != filter.rdst.family ||
-   filter.rdst.bitlen > r->rtm_dst_len)
-   return 0;
-   } else if (filter.rdst.flags & PREFIXLEN_SPECIFIED) {
-   if (filter.rdst.bitlen > r->rtm_dst_len)
-   return 0;
-   }
-   if (filter.mdst.family) {
-   if (r->rtm_family != filter.mdst.family ||
-   (filter.mdst.bitlen >= 0 &&
-filter.mdst.bitlen < r->rtm_dst_len))
-   return 0;
-   } else if (filter.mdst.flags & PREFIXLEN_SPECIFIED) {
-   if (filter.mdst.bitlen >= 0 &&
-   filter.mdst.bitlen < r->rtm_dst_len)
-   return 0;
-   }
-   if (filter.rsrc.family) {
-   if (r->rtm_family != filter.rsrc.family ||
-   filter.rsrc.bitlen > r->rtm_src_len)
-   return 0;
-   } else if (filter.rsrc.flags & PREFIXLEN_SPECIFIED) {
-   if (filter.rsrc.bitlen > r->rtm_src_len)
-   return 0;
-   }
-   if (filter.msrc.family) {
-   if (r->rtm_family != filter.msrc.family ||
-   (filter.msrc.bitlen >= 0 &&
-filter.msrc.bitlen < r->rtm_src_len))
-   return 0;
-   } else if (filter.msrc.flags & PREFIXLEN_SPECIFIED) {
-   if (filter.msrc.bitlen >= 0 &&
-   filter.msrc.bitlen < r->rtm_src_len)
-   return 0;
-   }
+   if (filter.rdst.family &&
+   (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > 
r->rtm_dst_len))
+   return 0;
+   if (filter.mdst.family &&
+   (r->rtm_family != filter.mdst.family ||
+(filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len)))
+   return 0;
+   if (filter.rsrc.family &&
+   (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > 
r->rtm_src_len))
+   return 0;
+   if (filter.msrc.family &&
+   (r->rtm_family != filter.msrc.family ||
+(filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len)))
+   return 0;
if (filter.rvia.family) {
int family = r->rtm_family;
 
@@ -243,9 +221,7 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr 
**tb, int host_len)
 
if (tb[RTA_DST])
memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), (r->rtm_dst_len+7)/8);
-   if (filter.rsrc.family || filter.msrc.family ||
-   filter.rsrc.flags & PREFIXLEN_SPECIFIED ||
-   filter.msrc.flags & PREFIXLEN_SPECIFIED) {
+   if (filter.rsrc.family || filter.msrc.family) {
if (tb[RTA_SRC])
memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), 
(r->rtm_src_len+7)/8);
}
@@ -265,18 +241,15 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr 
**tb, int host_len)
memcpy(&prefsrc.data, RTA_DATA(tb[RTA_PREFSRC]), 
host_len/8);
}
 
-   if ((filter.rdst.family || filter.rdst.flags & PREFIXLEN_SPECIFIED) &&
-   inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen))
+   if (filter.rdst.family && inet_addr_match(&dst, &filter.rdst, 
filter.rdst.bitlen))
return 0;
-   if ((filter.mdst.family || filter.mdst.flags & PREFIXLEN_SPECIFIED) &&
+   if (filter.mdst.family && filter.mdst.bitlen >= 0 &&
inet_addr_match(&dst, &filter.mdst, r->rtm_dst_len))
return 0;
 
-   if ((filter.rsrc.family || filter.rsrc.flags & PREFIXLEN_SPECIFIED) &&
-   inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen))
+   if (filter.rsrc.family && inet_addr_match(&src, &filter.rsrc, 
filter.rsrc.bitlen))
return 0;
-   if ((filter.msrc.family || filter.msrc.flags & PREFIXLEN_SPECIFIED) &&
-   filter.msrc.bitlen >= 0 &&
+   if (filter.msrc.family && filter.msrc.bitlen >= 0 &&
inet_addr_match(&src, &filter.msrc, r->rtm_src_len))
return 0;
 
diff --git a/lib/utils.c b/lib/utils.c
index 379739