diff mbox series

[iproute2] ip route: get: only set RTM_F_LOOKUP_TABLE flag for IPv4

Message ID 20190112205406.25698-1-jakub.kicinski@netronome.com
State Accepted
Delegated to: stephen hemminger
Headers show
Series [iproute2] ip route: get: only set RTM_F_LOOKUP_TABLE flag for IPv4 | expand

Commit Message

Jakub Kicinski Jan. 12, 2019, 8:54 p.m. UTC
Kernel ignores the RTM_F_LOOKUP_TABLE flag for all families
but IPv4.  Don't set it, otherwise it may fall foul of
strict checking policies.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 ip/iproute.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Stephen Hemminger Jan. 14, 2019, 4:05 p.m. UTC | #1
On Sat, 12 Jan 2019 12:54:06 -0800
Jakub Kicinski <jakub.kicinski@netronome.com> wrote:

> Kernel ignores the RTM_F_LOOKUP_TABLE flag for all families
> but IPv4.  Don't set it, otherwise it may fall foul of
> strict checking policies.
> 
> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>

Doing the right thing is a good idea, but really I can't see
the point of doing this. The kernel will always have to accept
requests from older versions of iproute2 (it can never be stricter)
because of ABI compatibility. So unless you can make a stronger
case for this; no not applying it.
David Ahern Jan. 14, 2019, 4:29 p.m. UTC | #2
On 1/14/19 9:05 AM, Stephen Hemminger wrote:
> On Sat, 12 Jan 2019 12:54:06 -0800
> Jakub Kicinski <jakub.kicinski@netronome.com> wrote:
> 
>> Kernel ignores the RTM_F_LOOKUP_TABLE flag for all families
>> but IPv4.  Don't set it, otherwise it may fall foul of
>> strict checking policies.
>>
>> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
> 
> Doing the right thing is a good idea, but really I can't see
> the point of doing this. The kernel will always have to accept
> requests from older versions of iproute2 (it can never be stricter)
> because of ABI compatibility. So unless you can make a stronger
> case for this; no not applying it.
> 

iproute2 is often used as a reference model for features. Making
iproute2 correct is the right thing to do regardless of whether what the
kernel accepts.

Current master branch is the first iproute2 to use the strict checking,
and its first release with strict checking should have as many of these
little one offs as possible fixed.
Ido Schimmel Jan. 21, 2019, 7:32 a.m. UTC | #3
On Mon, Jan 14, 2019 at 09:29:51AM -0700, David Ahern wrote:
> On 1/14/19 9:05 AM, Stephen Hemminger wrote:
> > On Sat, 12 Jan 2019 12:54:06 -0800
> > Jakub Kicinski <jakub.kicinski@netronome.com> wrote:
> > 
> >> Kernel ignores the RTM_F_LOOKUP_TABLE flag for all families
> >> but IPv4.  Don't set it, otherwise it may fall foul of
> >> strict checking policies.
> >>
> >> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
> > 
> > Doing the right thing is a good idea, but really I can't see
> > the point of doing this. The kernel will always have to accept
> > requests from older versions of iproute2 (it can never be stricter)
> > because of ABI compatibility. So unless you can make a stronger
> > case for this; no not applying it.
> > 
> 
> iproute2 is often used as a reference model for features. Making
> iproute2 correct is the right thing to do regardless of whether what the
> kernel accepts.
> 
> Current master branch is the first iproute2 to use the strict checking,
> and its first release with strict checking should have as many of these
> little one offs as possible fixed.

With current iproute2-next and net-next I get:

$ ip -6 route get 2001:db8:1::2
Error: ipv6: Invalid flags for get route request.

Are we going to patch the kernel to accept a flag it is not using or are
we going to patch iproute2 to not send it?
David Ahern Jan. 21, 2019, 2:56 p.m. UTC | #4
On 1/21/19 12:32 AM, Ido Schimmel wrote:
> On Mon, Jan 14, 2019 at 09:29:51AM -0700, David Ahern wrote:
>> On 1/14/19 9:05 AM, Stephen Hemminger wrote:
>>> On Sat, 12 Jan 2019 12:54:06 -0800
>>> Jakub Kicinski <jakub.kicinski@netronome.com> wrote:
>>>
>>>> Kernel ignores the RTM_F_LOOKUP_TABLE flag for all families
>>>> but IPv4.  Don't set it, otherwise it may fall foul of
>>>> strict checking policies.
>>>>
>>>> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
>>>
>>> Doing the right thing is a good idea, but really I can't see
>>> the point of doing this. The kernel will always have to accept
>>> requests from older versions of iproute2 (it can never be stricter)
>>> because of ABI compatibility. So unless you can make a stronger
>>> case for this; no not applying it.
>>>
>>
>> iproute2 is often used as a reference model for features. Making
>> iproute2 correct is the right thing to do regardless of whether what the
>> kernel accepts.
>>
>> Current master branch is the first iproute2 to use the strict checking,
>> and its first release with strict checking should have as many of these
>> little one offs as possible fixed.
> 
> With current iproute2-next and net-next I get:
> 
> $ ip -6 route get 2001:db8:1::2
> Error: ipv6: Invalid flags for get route request.
> 
> Are we going to patch the kernel to accept a flag it is not using or are
> we going to patch iproute2 to not send it?
> 

iproute2 (master should have the problem too) should not send the flag
for IPv6. Stephen should apply Jakub's patch and I can merge branches.
David Ahern Jan. 22, 2019, 4:32 p.m. UTC | #5
On 1/21/19 12:32 AM, Ido Schimmel wrote:
> Are we going to patch the kernel to accept a flag it is not using or are
> we going to patch iproute2 to not send it?

Stephen merged this patch to master; I merged to next. should be good now.
Ido Schimmel Jan. 22, 2019, 4:43 p.m. UTC | #6
On Tue, Jan 22, 2019 at 09:32:44AM -0700, David Ahern wrote:
> On 1/21/19 12:32 AM, Ido Schimmel wrote:
> > Are we going to patch the kernel to accept a flag it is not using or are
> > we going to patch iproute2 to not send it?
> 
> Stephen merged this patch to master; I merged to next. should be good now.

Thanks!
diff mbox series

Patch

diff --git a/ip/iproute.c b/ip/iproute.c
index 0440366ee26a..5f58a3b34406 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -2068,7 +2068,9 @@  static int iproute_get(int argc, char **argv)
 	if (req.r.rtm_family == AF_UNSPEC)
 		req.r.rtm_family = AF_INET;
 
-	req.r.rtm_flags |= RTM_F_LOOKUP_TABLE;
+	/* Only IPv4 supports the RTM_F_LOOKUP_TABLE flag */
+	if (req.r.rtm_family == AF_INET)
+		req.r.rtm_flags |= RTM_F_LOOKUP_TABLE;
 	if (fib_match)
 		req.r.rtm_flags |= RTM_F_FIB_MATCH;