Thread (1 message) 1 message, 1 author, 2023-08-21

Re: [PATCH net-next v2 06/10] tools/net/ynl: Add support for netlink-raw families

From: Donald Hunter <donald.hunter@gmail.com>
Date: 2023-08-21 14:03:02
Also in: linux-doc

Jakub Kicinski [off-list ref] writes:
On Thu, 17 Aug 2023 10:10:35 +0100 Donald Hunter wrote:
quoted
quoted
Looks good, but do we also need some extra plumbing to decode extack
for classic netlink correctly?  Basically shouldn't _decode_extack()
also move to proto? Or we can parameterize it? All we really need there
is to teach it how much of fixed headers parser needs to skip to get to
attributes, really (which, BTW is already kinda buggy for genl families
with fixed headers).  
I have been working on the assumption that extack responses don't
include any fixed headers. I have seen extack messages decoded correctly
for classic netlink, here with RTM_NEWROUTE:

lib.ynl.NlError: Netlink error: Invalid argument
nl_len = 80 (64) nl_flags = 0x300 nl_type = 2
  error: -22  extack: {'msg': 'Invalid prefix for given prefix length'}

Is there something I am missing?
I'm thinking of extack messages carrying offsets in addition to the 
textual error message. NLMSGERR_ATTR_OFFS or NLMSGERR_ATTR_MISS_NEST.

In that case ynl will try to re-parse its own message via
_decode_extack_path() to resolve from the offset to what attribute
was there. See the commit message on a552bfa16:

    lib.ynl.NlError: Netlink error: Numerical result out of range
    nl_len = 108 (92) nl_flags = 0x300 nl_type = 2
            error: -34      extack: {'msg': 'integer out of range',...
                                     'bad-attr': '.ifindex'}

I mean the "bad-attr" thing.

I think it works out of sheer luck here, we happen to skip over 
the fixed header because it looks like a 0-length attribute?
You're right, sheer luck, and maybe only for some values of dp-ifindex.
When I tried to reproduce your test in commit a552bfa16, with a value of
dp-ifindex = 5, then ynl goes into an infinite loop trying to read a
zero length nlattr.

As you say, I'll need to rework the extack handling to account for fixed
headers. At a minimum _decode_extack will need to use nlproto.decode()
and needs to learn to skip the fixed header.

Apologies for being slow to catch up with you on this. Failing to grok
that _decode_extack is decoding the request, not the response.

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help