[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <b2e7f22c-6da3-4f48-9940-f3cc1aea2af2@ovn.org>
Date: Thu, 11 Apr 2024 17:39:20 +0200
From: Ilya Maximets <i.maximets@....org>
To: Jakub Kicinski <kuba@...nel.org>
Cc: i.maximets@....org, Eric Dumazet <edumazet@...gle.com>,
Stefano Brivio <sbrivio@...hat.com>, davem@...emloft.net,
netdev@...r.kernel.org, pabeni@...hat.com, jiri@...nulli.us,
idosch@...sch.org, johannes@...solutions.net, fw@...len.de,
pablo@...filter.org, Martin Pitt <mpitt@...hat.com>,
Paul Holzinger <pholzing@...hat.com>,
David Gibson <david@...son.dropbear.id.au>
Subject: Re: [PATCH net-next v2 3/3] genetlink: fit NLMSG_DONE into same
read() as families
On 4/11/24 17:16, Jakub Kicinski wrote:
> On Thu, 4 Apr 2024 00:52:15 +0200 Ilya Maximets wrote:
>> /usr/sbin/ipsec auto --config ipsec.conf --ctlsocket pluto.ctl \
>> --start --asynchronous tun-in-1
>>
>> recvfrom(7,
>> [
>> [{nlmsg_len=52, nlmsg_type=RTM_NEWROUTE, nlmsg_flags=NLM_F_MULTI, ...],
>> ...
>> [{nlmsg_len=52, nlmsg_type=RTM_NEWROUTE, nlmsg_flags=NLM_F_MULTI, ...],
>> [{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, ...]
>> ], 40960, 0, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, [12])
>>
>> recvfrom(7, <-- Stuck here forever
>
> I think we should probably fix this..
> Would you mind sharing the sendmsg() call? Eyeballing rtnl_dump_all() -
> it does seem to coalesce DONE..
Sure, the whole sequence looks like this in strace:
socket(AF_NETLINK, SOCK_DGRAM|SOCK_CLOEXEC, NETLINK_ROUTE) = 7
sendto(7, [
{
nlmsg_len=36, nlmsg_type=0x1a /* NLMSG_??? */,
nlmsg_flags=NLM_F_REQUEST|0x300, nlmsg_seq=0, nlmsg_pid=138040
},
"\x02\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x01\x00\x0a\x01\x01\x02"
], 36, 0, NULL, 0) = 36
recvfrom(7, [
[
{nlmsg_len=52, nlmsg_type=RTM_NEWROUTE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=0, nlmsg_pid=138040},
{rtm_family=AF_INET, rtm_dst_len=0, rtm_src_len=0, rtm_tos=0, rtm_table=RT_TABLE_MAIN,
rtm_protocol=RTPROT_BOOT, rtm_scope=RT_SCOPE_UNIVERSE, rtm_type=RTN_UNICAST, rtm_flags=0},
[
[{nla_len=8, nla_type=RTA_TABLE}, RT_TABLE_MAIN],
[{nla_len=8, nla_type=RTA_GATEWAY}, inet_addr("10.1.1.2")],
[{nla_len=8, nla_type=RTA_OIF}, if_nametoindex("p0")]
]
],
[
{nlmsg_len=60, nlmsg_type=RTM_NEWROUTE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=0, nlmsg_pid=138040},
{rtm_family=AF_INET, rtm_dst_len=24, rtm_src_len=0, rtm_tos=0, rtm_table=RT_TABLE_MAIN,
rtm_protocol=RTPROT_KERNEL, rtm_scope=RT_SCOPE_LINK, rtm_type=RTN_UNICAST, rtm_flags=0},
[
[{nla_len=8, nla_type=RTA_TABLE}, RT_TABLE_MAIN],
[{nla_len=8, nla_type=RTA_DST}, inet_addr("10.1.1.0")],
[{nla_len=8, nla_type=RTA_PREFSRC}, inet_addr("10.1.1.1")],
[{nla_len=8, nla_type=RTA_OIF}, if_nametoindex("p0")]
]
],
[
{nlmsg_len=60, nlmsg_type=RTM_NEWROUTE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=0, nlmsg_pid=138040},
{rtm_family=AF_INET, rtm_dst_len=32, rtm_src_len=0, rtm_tos=0, rtm_table=RT_TABLE_LOCAL,
rtm_protocol=RTPROT_KERNEL, rtm_scope=RT_SCOPE_HOST, rtm_type=RTN_LOCAL, rtm_flags=0},
[
[{nla_len=8, nla_type=RTA_TABLE}, RT_TABLE_LOCAL],
[{nla_len=8, nla_type=RTA_DST}, inet_addr("10.1.1.1")],
[{nla_len=8, nla_type=RTA_PREFSRC}, inet_addr("10.1.1.1")],
[{nla_len=8, nla_type=RTA_OIF}, if_nametoindex("p0")]
]
],
[
{nlmsg_len=60, nlmsg_type=RTM_NEWROUTE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=0, nlmsg_pid=138040},
{rtm_family=AF_INET, rtm_dst_len=32, rtm_src_len=0, rtm_tos=0, rtm_table=RT_TABLE_LOCAL,
rtm_protocol=RTPROT_KERNEL, rtm_scope=RT_SCOPE_LINK, rtm_type=RTN_BROADCAST, rtm_flags=0},
[
[{nla_len=8, nla_type=RTA_TABLE}, RT_TABLE_LOCAL],
[{nla_len=8, nla_type=RTA_DST}, inet_addr("10.1.1.255")],
[{nla_len=8, nla_type=RTA_PREFSRC}, inet_addr("10.1.1.1")],
[{nla_len=8, nla_type=RTA_OIF}, if_nametoindex("p0")]
]
],
[
{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=0, nlmsg_pid=138040}, 0
]
], 40960, 0, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, [12]) = 252
recvfrom(7, <unfinished ...>
nlmsg_type=0x1a /* NLMSG_??? */ --> RTM_GETROUTE
nlmsg_flags=NLM_F_REQUEST|0x300 --> NLM_F_REQUEST|NLM_F_DUMP
Best regards, Ilya Maximets.
Powered by blists - more mailing lists