]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ipv6: sr: restruct ifdefines
authorHangbin Liu <liuhangbin@gmail.com>
Wed, 29 May 2024 04:09:08 +0000 (12:09 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 31 May 2024 01:29:38 +0000 (18:29 -0700)
There are too many ifdef in IPv6 segment routing code that may cause logic
problems. like commit 160e9d275218 ("ipv6: sr: fix invalid unregister error
path"). To avoid this, the init functions are redefined for both cases. The
code could be more clear after all fidefs are removed.

Suggested-by: Simon Horman <horms@kernel.org>
Suggested-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20240529040908.3472952-1-liuhangbin@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/seg6.h
include/net/seg6_hmac.h
net/ipv6/seg6.c

index af668f17b3988d890fed907a22339cfc1d3fd25c..82b3fbbcbb93511b5aba8be366bd04ea4c027ca8 100644 (file)
@@ -52,10 +52,17 @@ static inline struct seg6_pernet_data *seg6_pernet(struct net *net)
 
 extern int seg6_init(void);
 extern void seg6_exit(void);
+#ifdef CONFIG_IPV6_SEG6_LWTUNNEL
 extern int seg6_iptunnel_init(void);
 extern void seg6_iptunnel_exit(void);
 extern int seg6_local_init(void);
 extern void seg6_local_exit(void);
+#else
+static inline int seg6_iptunnel_init(void) { return 0; }
+static inline void seg6_iptunnel_exit(void) {}
+static inline int seg6_local_init(void) { return 0; }
+static inline void seg6_local_exit(void) {}
+#endif
 
 extern bool seg6_validate_srh(struct ipv6_sr_hdr *srh, int len, bool reduced);
 extern struct ipv6_sr_hdr *seg6_get_srh(struct sk_buff *skb, int flags);
index 2b5d2ee5613e83a2b1d83fb806ab990fffb1f36c..24f733b3e3fe9c4afa14a017124026b36815630d 100644 (file)
@@ -49,9 +49,16 @@ extern int seg6_hmac_info_del(struct net *net, u32 key);
 extern int seg6_push_hmac(struct net *net, struct in6_addr *saddr,
                          struct ipv6_sr_hdr *srh);
 extern bool seg6_hmac_validate_skb(struct sk_buff *skb);
+#ifdef CONFIG_IPV6_SEG6_HMAC
 extern int seg6_hmac_init(void);
 extern void seg6_hmac_exit(void);
 extern int seg6_hmac_net_init(struct net *net);
 extern void seg6_hmac_net_exit(struct net *net);
+#else
+static inline int seg6_hmac_init(void) { return 0; }
+static inline void seg6_hmac_exit(void) {}
+static inline int seg6_hmac_net_init(struct net *net) { return 0; }
+static inline void seg6_hmac_net_exit(struct net *net) {}
+#endif
 
 #endif
index a31521e270f785691140d7ecfebcc3d472f690b2..180da19c148c1d4a24ca9b117b4ad60037cc066c 100644 (file)
@@ -21,9 +21,7 @@
 #include <net/genetlink.h>
 #include <linux/seg6.h>
 #include <linux/seg6_genl.h>
-#ifdef CONFIG_IPV6_SEG6_HMAC
 #include <net/seg6_hmac.h>
-#endif
 
 bool seg6_validate_srh(struct ipv6_sr_hdr *srh, int len, bool reduced)
 {
@@ -437,13 +435,11 @@ static int __net_init seg6_net_init(struct net *net)
 
        net->ipv6.seg6_data = sdata;
 
-#ifdef CONFIG_IPV6_SEG6_HMAC
        if (seg6_hmac_net_init(net)) {
                kfree(rcu_dereference_raw(sdata->tun_src));
                kfree(sdata);
                return -ENOMEM;
        }
-#endif
 
        return 0;
 }
@@ -452,9 +448,7 @@ static void __net_exit seg6_net_exit(struct net *net)
 {
        struct seg6_pernet_data *sdata = seg6_pernet(net);
 
-#ifdef CONFIG_IPV6_SEG6_HMAC
        seg6_hmac_net_exit(net);
-#endif
 
        kfree(rcu_dereference_raw(sdata->tun_src));
        kfree(sdata);
@@ -520,41 +514,28 @@ int __init seg6_init(void)
        if (err)
                goto out_unregister_pernet;
 
-#ifdef CONFIG_IPV6_SEG6_LWTUNNEL
        err = seg6_iptunnel_init();
        if (err)
                goto out_unregister_genl;
 
        err = seg6_local_init();
-       if (err) {
-               seg6_iptunnel_exit();
-               goto out_unregister_genl;
-       }
-#endif
+       if (err)
+               goto out_unregister_iptun;
 
-#ifdef CONFIG_IPV6_SEG6_HMAC
        err = seg6_hmac_init();
        if (err)
-               goto out_unregister_iptun;
-#endif
+               goto out_unregister_seg6;
 
        pr_info("Segment Routing with IPv6\n");
 
 out:
        return err;
-#ifdef CONFIG_IPV6_SEG6_HMAC
-out_unregister_iptun:
-#ifdef CONFIG_IPV6_SEG6_LWTUNNEL
+out_unregister_seg6:
        seg6_local_exit();
+out_unregister_iptun:
        seg6_iptunnel_exit();
-#endif
-#endif
-#ifdef CONFIG_IPV6_SEG6_LWTUNNEL
 out_unregister_genl:
-#endif
-#if IS_ENABLED(CONFIG_IPV6_SEG6_LWTUNNEL) || IS_ENABLED(CONFIG_IPV6_SEG6_HMAC)
        genl_unregister_family(&seg6_genl_family);
-#endif
 out_unregister_pernet:
        unregister_pernet_subsys(&ip6_segments_ops);
        goto out;
@@ -562,13 +543,9 @@ out_unregister_pernet:
 
 void seg6_exit(void)
 {
-#ifdef CONFIG_IPV6_SEG6_HMAC
        seg6_hmac_exit();
-#endif
-#ifdef CONFIG_IPV6_SEG6_LWTUNNEL
        seg6_local_exit();
        seg6_iptunnel_exit();
-#endif
        genl_unregister_family(&seg6_genl_family);
        unregister_pernet_subsys(&ip6_segments_ops);
 }