v2: fix conditional compilation for seg6_iptunnel.o in Makefile This patch compiles SR lwtunnels support only if CONFIG_LWTUNNEL=y.
If IPv6 is enabled and CONFIG_LWTUNNEL=n, then seg6_iptunnel_init() fails with EOPNOTSUPP which in turn makes seg6_init() fail, blocking the IPv6 initialization, with the following messages: NET: Registered protocol family 10 IPv6: Attempt to unregister permanent protocol 6 IPv6: Attempt to unregister permanent protocol 136 IPv6: Attempt to unregister permanent protocol 17 NET: Unregistered protocol family 10 Fix commit 6c8702c60b88 ("ipv6: sr: add support for SRH encapsulation and injection with lwtunnels") Tested with various combinations of CONFIG_IPV6 and CONFIG_LWTUNNEL. Reported-by: Lorenzo Colitti <lore...@google.com> Signed-off-by: David Lebrun <david.leb...@uclouvain.be> --- net/ipv6/Kconfig | 1 + net/ipv6/Makefile | 3 ++- net/ipv6/seg6.c | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/net/ipv6/Kconfig b/net/ipv6/Kconfig index 0f00811..030cdb6 100644 --- a/net/ipv6/Kconfig +++ b/net/ipv6/Kconfig @@ -292,6 +292,7 @@ config IPV6_PIMSM_V2 config IPV6_SEG6_INLINE bool "IPv6: direct Segment Routing Header insertion " depends on IPV6 + depends on LWTUNNEL ---help--- Support for direct insertion of the Segment Routing Header, also known as inline mode. Be aware that direct insertion of diff --git a/net/ipv6/Makefile b/net/ipv6/Makefile index 129cad2..8979d53 100644 --- a/net/ipv6/Makefile +++ b/net/ipv6/Makefile @@ -9,7 +9,7 @@ ipv6-objs := af_inet6.o anycast.o ip6_output.o ip6_input.o addrconf.o \ route.o ip6_fib.o ipv6_sockglue.o ndisc.o udp.o udplite.o \ raw.o icmp.o mcast.o reassembly.o tcp_ipv6.o ping.o \ exthdrs.o datagram.o ip6_flowlabel.o inet6_connection_sock.o \ - udp_offload.o seg6.o seg6_iptunnel.o + udp_offload.o seg6.o ipv6-offload := ip6_offload.o tcpv6_offload.o exthdrs_offload.o @@ -53,5 +53,6 @@ obj-$(subst m,y,$(CONFIG_IPV6)) += inet6_hashtables.o ifneq ($(CONFIG_IPV6),) obj-$(CONFIG_NET_UDP_TUNNEL) += ip6_udp_tunnel.o +obj-$(CONFIG_LWTUNNEL) += seg6_iptunnel.o obj-y += mcast_snoop.o endif diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c index 50f6e06..0f74f90 100644 --- a/net/ipv6/seg6.c +++ b/net/ipv6/seg6.c @@ -451,9 +451,11 @@ int __init seg6_init(void) if (err) goto out_unregister_genl; +#ifdef CONFIG_LWTUNNEL err = seg6_iptunnel_init(); if (err) goto out_unregister_pernet; +#endif #ifdef CONFIG_IPV6_SEG6_HMAC err = seg6_hmac_init(); @@ -467,10 +469,14 @@ int __init seg6_init(void) return err; #ifdef CONFIG_IPV6_SEG6_HMAC out_unregister_iptun: +#ifdef CONFIG_LWTUNNEL seg6_iptunnel_exit(); #endif +#endif +#ifdef CONFIG_LWTUNNEL out_unregister_pernet: unregister_pernet_subsys(&ip6_segments_ops); +#endif out_unregister_genl: genl_unregister_family(&seg6_genl_family); goto out; @@ -481,7 +487,9 @@ void seg6_exit(void) #ifdef CONFIG_IPV6_SEG6_HMAC seg6_hmac_exit(); #endif +#ifdef CONFIG_LWTUNNEL seg6_iptunnel_exit(); +#endif unregister_pernet_subsys(&ip6_segments_ops); genl_unregister_family(&seg6_genl_family); } -- 2.7.3