Bug 981887

Summary: wicked does not start without CONFIG_FIB_RULES in kernel
Product: [openSUSE] openSUSE Tumbleweed Reporter: Jiri Slaby <jslaby>
Component: NetworkAssignee: wicked maintainers <wicked-maintainers>
Status: RESOLVED FIXED QA Contact: E-mail List <qa-bugs>
Severity: Enhancement    
Priority: P5 - None CC: jslaby, mkubecek, mt, ndas, nirmoy.das
Version: Current   
Target Milestone: ---   
Hardware: Other   
OS: Other   
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---

Description Jiri Slaby 2016-05-26 17:27:11 UTC
Why does wicked need advanced routing? RTM_GETRULE is only available if advanced routing is compiled in kernel, but wicked/src/iflist.c tries to enforce this netlink command to be present.

There is no reason why networking should not start without RTM_GETRULE/FIB_RULES.

The failure is as follows:
# /usr/sbin/wickedd  --foreground 
wickedd: ni_nl_dump_store: failed to receive response: Operation not supported
wickedd: failed to refresh interface list
wickedd: failed to discover interface state

This is a regression from previous networking setups with dhcp clients like dhclient or dhcpcd.
Comment 1 Marius Tomaschewski 2016-06-02 20:33:57 UTC
(In reply to Jiri Slaby from comment #0)
> Why does wicked need advanced routing? RTM_GETRULE is only available if
> advanced routing is compiled in kernel,

Then fix this in your kernel to be available again. It is a requested
feature and rules are available in all our kernels since ages (I were
using them already ~20 years ago).

> There is no reason why networking should not start without
> RTM_GETRULE/FIB_RULES.

That's true.

> The failure is as follows:
> # /usr/sbin/wickedd  --foreground 
> wickedd: ni_nl_dump_store: failed to receive response: Operation not
> supported
> wickedd: failed to refresh interface list
> wickedd: failed to discover interface state

Which broken kernel is this? OK, makes sense to catch this and report
more nicely that the kernel is missing functionality and rules are not
supported.

> This is a regression from previous networking setups with dhcp clients like
> dhclient or dhcpcd.

Yes, it is definitively a regression, but mostly in the _kernel_.

It also has _nothing_ with dhcp in common.

Routing rule support is a requested feature (already for SLES-11; but
was deferred [first implementation exists] due to time constrains).
Comment 2 Marius Tomaschewski 2016-06-02 21:13:13 UTC
Just tested with Tumbleweed and the kernel contains the rule support
as it should and it is only your kernel build which lacks it.

Setting to enhancement to make a separate query to not fail the main
query when the kernel lacks it -- unlike all our kernels since ages.
Comment 3 Michal Kubeček 2016-06-08 07:15:04 UTC
Depending on FIB_RULES as such doesn't make much sense, IMHO. If you have
FIB_RULES but not any of IP{,V6}{,_MROUTE}_MULTIPLE_TABLES, you may have
RTM_GETRULE netlink message registered but there are still no routing rules
to dump (and there can't possibly be), you can't possibly add any etc.

But perhaps wickedd would just fail a bit later and with a different error
on such kernel (with FIB_RULES but none of *_MULTIPLE_TABLES).
Comment 4 Marius Tomaschewski 2016-06-08 09:38:35 UTC
(In reply to Michal Kubeček from comment #3)
> Depending on FIB_RULES as such doesn't make much sense, IMHO. If you have
> FIB_RULES but not any of IP{,V6}{,_MROUTE}_MULTIPLE_TABLES, you may have
> RTM_GETRULE netlink message registered but there are still no routing rules
> to dump (and there can't possibly be), you can't possibly add any etc.
> 
> But perhaps wickedd would just fail a bit later and with a different error
> on such kernel (with FIB_RULES but none of *_MULTIPLE_TABLES).

It is not a problem to fix it in wicked and we will do it of course.
Most time costs probably to compile a kernel without rules and to test it.

Why it fails: I've added rule query to the common (link+addr+route) query
in "refresh all" used at bootstrap/start -- when it fails to query here,
we fail -- something is broken then. It is not a problem to remove the
rule query there again and query them separately (ignoring query error
in the separate call while bootstrap). No rules to dump (empty results)
is (are) not a problem.

When there are rules defined in the config, the setup will fail then,
but this is not a surprise.
Comment 7 Marius Tomaschewski 2016-06-09 16:31:54 UTC
Seems it needs these changes until CONFIG_FIB_RULES gets disabled,
otherwise the deps turn it on again...:

@@ -851,11 +851,7 @@
 CONFIG_NET_KEY_MIGRATE=y
 CONFIG_INET=y
 CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-# CONFIG_IP_FIB_TRIE_STATS is not set
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_ROUTE_CLASSID=y
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_DHCP=y
@@ -866,10 +862,7 @@
 CONFIG_NET_IP_TUNNEL=m
 CONFIG_NET_IPGRE=m
 CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
+# CONFIG_IP_MROUTE is not set
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_NET_UDP_TUNNEL=m
@@ -927,8 +920,7 @@
 CONFIG_IPV6_NDISC_NODETYPE=y
 CONFIG_IPV6_TUNNEL=m
 CONFIG_IPV6_GRE=m
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_IPV6_SUBTREES=y
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
 # CONFIG_IPV6_MROUTE is not set
 CONFIG_NETLABEL=y
 CONFIG_NETWORK_SECMARK=y
@@ -1647,7 +1639,6 @@
 # CONFIG_AF_RXRPC_DEBUG is not set
 CONFIG_RXKAD=m
 CONFIG_AF_KCM=m
-CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
 CONFIG_WIRELESS_EXT=y
 CONFIG_WEXT_CORE=y
@@ -2474,7 +2465,6 @@
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=m
 CONFIG_NLMON=m
-CONFIG_NET_VRF=m
 CONFIG_SUNGEM_PHY=m
 # CONFIG_ARCNET is not set
 CONFIG_ATM_DRIVERS=y

Jiri, you seem to have such a kernel already. Where?
Comment 9 Michal Kubeček 2016-06-09 16:55:09 UTC
CONFIG_FIB_RULES is selected by

  IP_MULTIPLE_TABLES
  IP_MROUTE_MULTIPLE_TABLES
  IPV6_MULTIPLE_TABLES
  IPV6_MROUTE_MULTIPLE_TABLES
Comment 10 Bernhard Wiedemann 2016-06-10 16:00:43 UTC
This is an autogenerated message for OBS integration:
This bug (981887) was mentioned in
https://build.opensuse.org/request/show/401114 Factory / wicked
Comment 12 Marius Tomaschewski 2016-06-13 09:11:48 UTC
(In reply to Michal Kubeček from comment #9)
> CONFIG_FIB_RULES is selected by
> 
>   IP_MULTIPLE_TABLES
>   IP_MROUTE_MULTIPLE_TABLES
>   IPV6_MULTIPLE_TABLES
>   IPV6_MROUTE_MULTIPLE_TABLES

Yes, a second attempt to disable it in the kernel worked and we've submitted
the cleanups already to factory + sle12.
Comment 13 Jiri Slaby 2016-06-14 19:44:28 UTC
Works great, thanks.
Comment 14 Swamp Workflow Management 2016-12-02 17:08:58 UTC
openSUSE-RU-2016:2978-1: An update that has 19 recommended fixes can now be installed.

Category: recommended (moderate)
Bug References: 865573,902897,913861,916613,916948,972471,973355,974231,975466,981887,982231,982952,984088,985894,988794,988954,989741,997027,998413
CVE References: 
Sources used:
openSUSE Leap 42.1 (src):    wicked-0.6.39-12.1
openSUSE 13.2 (src):    wicked-0.6.39-36.1
Comment 15 Swamp Workflow Management 2016-12-19 13:08:49 UTC
SUSE-RU-2016:3192-1: An update that has 19 recommended fixes can now be installed.

Category: recommended (moderate)
Bug References: 865573,902897,913861,916613,916948,972471,973355,974231,975466,981887,982231,982952,984088,985894,988794,988954,989741,997027,998413
CVE References: 
Sources used:
SUSE Linux Enterprise Server 12-SP1 (src):    wicked-0.6.39-28.3.1
SUSE Linux Enterprise Desktop 12-SP1 (src):    wicked-0.6.39-28.3.1