iproute2/ip
Alexander Mikhalitsyn 459ce6e3d7 ip route: ignore ENOENT during save if RT_TABLE_MAIN is being dumped
We started to use in-kernel filtering feature which allows to get only
needed tables (see iproute_dump_filter()). From the kernel side it's
implemented in net/ipv4/fib_frontend.c (inet_dump_fib), net/ipv6/ip6_fib.c
(inet6_dump_fib). The problem here is that behaviour of "ip route save"
was changed after
c7e6371bc ("ip route: Add protocol, table id and device to dump request").
If filters are used, then kernel returns ENOENT error if requested table
is absent, but in newly created net namespace even RT_TABLE_MAIN table
doesn't exist. It is really allocated, for instance, after issuing
"ip l set lo up".

Reproducer is fairly simple:
$ unshare -n ip route save > dump
Error: ipv4: FIB table does not exist.
Dump terminated

Expected result here is to get empty dump file (as it was before this
change).

v2: reworked, so, now it takes into account NLMSGERR_ATTR_MSG
(see nl_dump_ext_ack_done() function). We want to suppress error messages
in stderr about absent FIB table from kernel too.

v3: reworked to make code clearer. Introduced rtnl_suppressed_errors(),
rtnl_suppress_error() helpers. User may suppress up to 3 errors (may be
easily extended by changing SUPPRESS_ERRORS_INIT macro).

v4: reworked, rtnl_dump_filter_errhndlr() was introduced. Thanks
to Stephen Hemminger for comments and suggestions

v5: space fixes, commit message reformat, empty initializers

Fixes: c7e6371bc ("ip route: Add protocol, table id and device to dump request")
Cc: David Ahern <dsahern@gmail.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: Andrei Vagin <avagin@gmail.com>
Cc: Alexander Mikhalitsyn <alexander@mihalicyn.com>
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2021-07-07 07:32:56 -07:00
..
.gitignore Another .gitignore file. 2006-08-08 12:11:23 -07:00
ifcfg ifcfg/rtpr: convert to POSIX shell 2018-01-10 08:26:09 -08:00
ila_common.h SPDX license identifiers 2017-11-24 12:21:35 -08:00
ip6tunnel.c ip tunnel: add json output 2019-08-07 12:00:58 -07:00
ip_common.h Merge branch 'main' into next 2021-03-21 17:16:01 +00:00
ip.c Merge git://git.kernel.org/pub/scm/network/iproute2/iproute2-next 2021-04-27 19:39:39 -07:00
ipaddress.c iplink: add support for parent device 2021-06-26 04:40:22 +00:00
ipaddrlabel.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
ipfou.c ip fou: respect preferred_family for IPv6 2020-07-06 11:03:09 -07:00
ipila.c ip: cleanup help message text 2021-03-18 11:24:06 -07:00
ipl2tp.c use print_{,h}hu instead of print_uint when format specifier is %{,h}hu 2019-02-10 19:00:59 -08:00
iplink_bareudp.c iplink_bareudp: cleanup help message and man page 2021-02-02 14:11:32 -08:00
iplink_bond_slave.c iplink: bond: print lacp actor/partner oper states as strings 2020-01-02 17:45:32 +00:00
iplink_bond.c bond: support xmit_hash_policy=vlan+srcmac 2021-01-23 18:33:15 +00:00
iplink_bridge_slave.c ip: iplink_bridge_slave: Convert to use print_on_off() 2020-11-24 21:43:30 -07:00
iplink_bridge.c bridge: fix string length warning 2020-11-29 16:20:16 -08:00
iplink_can.c iplink_can: add Classical CAN frame LEN8_DLC support 2021-01-29 15:49:23 +00:00
iplink_dummy.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_geneve.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
iplink_hsr.c iplink: hsr: add support for creating PRP device similar to HSR 2020-08-22 21:14:12 -07:00
iplink_ifb.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_ipoib.c ip: iplink_ipoib.c: Remove extra spaces 2020-09-30 22:29:05 -07:00
iplink_ipvlan.c iplink: add ipvtap support 2018-09-20 17:53:56 -07:00
iplink_macvlan.c Merge branch 'main' into next 2021-04-28 15:48:28 +00:00
iplink_netdevsim.c ip: link: add support for netdevsim device type 2018-01-02 20:46:19 -08:00
iplink_nlmon.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_rmnet.c ip: add rmnet initial support 2018-06-15 11:15:14 -07:00
iplink_team.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_vcan.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
iplink_vlan.c lib: parse_mapping: Recognize a keyword "all" 2020-11-13 19:43:15 -07:00
iplink_vrf.c iplink_vrf: Save device index from response for return code 2018-06-01 15:45:09 -04:00
iplink_vxcan.c iplink: Perform most of request buffer setups and checks in iplink_parse() 2018-03-11 17:59:03 -07:00
iplink_vxlan.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
iplink_wwan.c iplink: support for WWAN devices 2021-06-26 04:40:57 +00:00
iplink_xdp.c iplink: add support for reporting multiple XDP programs 2018-07-15 13:10:03 -07:00
iplink_xstats.c ip: xstats: add json output support 2019-03-15 13:55:57 -07:00
iplink.c iplink: support for WWAN devices 2021-06-26 04:40:57 +00:00
ipmacsec.c lib: Add parse_one_of(), parse_on_off() 2020-11-13 19:43:15 -07:00
ipmaddr.c iproute2: ip maddress: Check multiaddr length 2020-08-22 21:12:30 -07:00
ipmonitor.c Merge branch 'main' into next 2021-03-21 17:16:01 +00:00
ipmptcp.c mptcp: make sure flag signal is set when add addr with port 2021-04-30 14:30:24 +00:00
ipmroute.c Merge branch 'master' into next 2019-06-21 15:59:24 -07:00
ipneigh.c ip: cleanup help message text 2021-03-18 11:24:06 -07:00
ipnetconf.c ip: ipnetconf: Convert to use print_on_off() 2020-11-24 21:43:34 -07:00
ipnetns.c ip: netns: fix missing netns close on some error paths 2021-04-26 21:04:02 -07:00
ipnexthop.c Merge git://git.kernel.org/pub/scm/network/iproute2/iproute2-next 2021-04-27 19:39:39 -07:00
ipntable.c ipntable: add missing ndts_table_fulls ntable stat 2020-10-06 15:07:10 -07:00
ipprefix.c Tree wide: Drop sockaddr_nl arg 2018-10-22 09:43:48 -07:00
iproute_lwtunnel.c seg6: add support for SRv6 End.DT46 Behavior 2021-06-22 15:36:17 +00:00
iproute.c ip route: ignore ENOENT during save if RT_TABLE_MAIN is being dumped 2021-07-07 07:32:56 -07:00
iprule.c ip: cleanup help message text 2021-03-18 11:24:06 -07:00
ipseg6.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
iptoken.c ip/iptoken: fix dump error when ipv6 disabled 2019-06-26 14:23:12 -07:00
iptunnel.c ip: cleanup help message text 2021-03-18 11:24:06 -07:00
iptuntap.c lib: move get_task_name() from rdma 2021-04-22 05:22:16 +00:00
ipvrf.c vrf: print BPF log buffer if bpf_program_load fails 2021-01-18 12:32:11 -08:00
ipxfrm.c Merge branch 'main' into next 2021-03-21 17:16:01 +00:00
link_gre6.c erspan: fix JSON output 2021-04-10 09:52:48 -07:00
link_gre.c erspan: fix JSON output 2021-04-10 09:52:48 -07:00
link_ip6tnl.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
link_iptnl.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
link_veth.c iplink: Perform most of request buffer setups and checks in iplink_parse() 2018-03-11 17:59:03 -07:00
link_vti6.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
link_vti.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
link_xfrm.c ip: xfrm if_id -ve value is error 2019-12-25 12:38:13 -08:00
Makefile iplink: support for WWAN devices 2021-06-26 04:40:57 +00:00
routef mark shell scripts +x 2018-01-10 08:23:49 -08:00
routel mark shell scripts +x 2018-01-10 08:23:49 -08:00
rtm_map.c ip: add a new parameter -Numeric 2019-06-18 08:37:47 -07:00
rtmon.c replace SNAPSHOT with auto-generated version string 2020-08-03 10:02:47 -07:00
rtpr ifcfg/rtpr: convert to POSIX shell 2018-01-10 08:26:09 -08:00
static-syms.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
tcp_metrics.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
tunnel.c ip tunnel: add json output 2019-08-07 12:00:58 -07:00
tunnel.h tunnel: factorize printout of GRE key and flags 2019-07-18 10:19:47 -07:00
xfrm_monitor.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
xfrm_policy.c ip xfrm: policy: support policies with IF_ID in get/delete/deleteall 2020-07-13 08:51:37 -07:00
xfrm_state.c ip: xfrm: add support for tfcpad 2021-03-21 17:15:07 +00:00
xfrm.h xfrm: add option to hide keys in state output 2019-01-21 08:31:20 -08:00