mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-06-14 03:03:52 +02:00
![Rui Salvaterra](/assets/img/avatar_default.png)
Deleted (upstreamed): generic/backport-5.15/610-v5.18-netfilter-flowtable-move-dst_check-to-packet-path.patch [1] generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch [2] generic/pending-5.15/704-01-netfilter-nft_flow_offload-skip-dst-neigh-lookup-for.patch [3] generic/pending-5.15/704-02-net-fix-dev_fill_forward_path-with-pppoe-bridge.patch [4] generic/pending-5.15/704-03-netfilter-nft_flow_offload-fix-offload-with-pppoe-vl.patch [5] Manually rebased: generic/hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=88b937673b3552d54da20f648e61a123f4c1fa67 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=5f4197a020c049a59ea7907c31f9ab037dcefefe [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=7613dcaceee281973145588f4244f2f78ef85b7f [4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=f96b2e06721249ebf8da3254cfef29dcb6583948 [5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=b329889974aed47e1167c85653c07097013e01a7 Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
107 lines
2.5 KiB
Diff
107 lines
2.5 KiB
Diff
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_core.c
|
|
+++ b/net/netfilter/nf_flow_table_core.c
|
|
@@ -608,13 +608,41 @@ 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);
|
|
+
|
|
+ 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 nf_flow_table_offload_init();
|
|
+ int ret;
|
|
+
|
|
+ ret = nf_flow_table_offload_init();
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = register_netdevice_notifier(&flow_offload_netdev_notifier);
|
|
+ if (ret)
|
|
+ nf_flow_table_offload_exit();
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
static void __exit nf_flow_table_module_exit(void)
|
|
{
|
|
+ unregister_netdevice_notifier(&flow_offload_netdev_notifier);
|
|
nf_flow_table_offload_exit();
|
|
}
|
|
|
|
--- a/net/netfilter/nft_flow_offload.c
|
|
+++ b/net/netfilter/nft_flow_offload.c
|
|
@@ -444,47 +444,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);
|
|
-
|
|
- 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;
|
|
-
|
|
- err = register_netdevice_notifier(&flow_offload_netdev_notifier);
|
|
- if (err)
|
|
- goto err;
|
|
-
|
|
- 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);
|
|
-err:
|
|
- 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);
|