OpenWrt – Rev 1

Subversion Repositories:
Rev:
From: Pablo Neira Ayuso <pablo@netfilter.org>
Date: Thu, 25 Jan 2018 12:58:55 +0100
Subject: [PATCH] netfilter: nft_flow_offload: handle netdevice events from
 nf_flow_table

Move the code that deals with device events to the core.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---

--- a/net/netfilter/nf_flow_table.c
+++ b/net/netfilter/nf_flow_table.c
@@ -462,5 +462,35 @@ void nf_flow_table_free(struct nf_flowta
 }
 EXPORT_SYMBOL_GPL(nf_flow_table_free);
 
+static int nf_flow_table_netdev_event(struct notifier_block *this,
+                                     unsigned long event, void *ptr)
+{
+       struct net_device *dev = netdev_notifier_info_to_dev(ptr);
+
+       if (event != NETDEV_DOWN)
+               return NOTIFY_DONE;
+
+       nf_flow_table_cleanup(dev_net(dev), dev);
+
+       return NOTIFY_DONE;
+}
+
+static struct notifier_block flow_offload_netdev_notifier = {
+       .notifier_call  = nf_flow_table_netdev_event,
+};
+
+static int __init nf_flow_table_module_init(void)
+{
+       return register_netdevice_notifier(&flow_offload_netdev_notifier);
+}
+
+static void __exit nf_flow_table_module_exit(void)
+{
+       unregister_netdevice_notifier(&flow_offload_netdev_notifier);
+}
+
+module_init(nf_flow_table_module_init);
+module_exit(nf_flow_table_module_exit);
+
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
@@ -194,44 +194,14 @@ static struct nft_expr_type nft_flow_off
        .owner          = THIS_MODULE,
 };
 
-static int flow_offload_netdev_event(struct notifier_block *this,
-                                    unsigned long event, void *ptr)
-{
-       struct net_device *dev = netdev_notifier_info_to_dev(ptr);
-
-       if (event != NETDEV_DOWN)
-               return NOTIFY_DONE;
-
-       nf_flow_table_cleanup(dev_net(dev), dev);
-
-       return NOTIFY_DONE;
-}
-
-static struct notifier_block flow_offload_netdev_notifier = {
-       .notifier_call  = flow_offload_netdev_event,
-};
-
 static int __init nft_flow_offload_module_init(void)
 {
-       int err;
-
-       register_netdevice_notifier(&flow_offload_netdev_notifier);
-
-       err = nft_register_expr(&nft_flow_offload_type);
-       if (err < 0)
-               goto register_expr;
-
-       return 0;
-
-register_expr:
-       unregister_netdevice_notifier(&flow_offload_netdev_notifier);
-       return err;
+       return nft_register_expr(&nft_flow_offload_type);
 }
 
 static void __exit nft_flow_offload_module_exit(void)
 {
        nft_unregister_expr(&nft_flow_offload_type);
-       unregister_netdevice_notifier(&flow_offload_netdev_notifier);
 }
 
 module_init(nft_flow_offload_module_init);