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 |
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.
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.
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?
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.
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.
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 --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;
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(-)