xfrm: Move device notifications to a sepatate file
This is needed for the upcomming IPsec device offloading. Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
Родитель
9d389d7f84
Коммит
21f42cc95f
|
@ -1443,6 +1443,7 @@ struct xfrm6_tunnel {
|
||||||
void xfrm_init(void);
|
void xfrm_init(void);
|
||||||
void xfrm4_init(void);
|
void xfrm4_init(void);
|
||||||
int xfrm_state_init(struct net *net);
|
int xfrm_state_init(struct net *net);
|
||||||
|
void xfrm_dev_init(void);
|
||||||
void xfrm_state_fini(struct net *net);
|
void xfrm_state_fini(struct net *net);
|
||||||
void xfrm4_state_init(void);
|
void xfrm4_state_init(void);
|
||||||
void xfrm4_protocol_init(void);
|
void xfrm4_protocol_init(void);
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_hash.o \
|
obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_hash.o \
|
||||||
xfrm_input.o xfrm_output.o \
|
xfrm_input.o xfrm_output.o \
|
||||||
xfrm_sysctl.o xfrm_replay.o
|
xfrm_sysctl.o xfrm_replay.o xfrm_device.o
|
||||||
obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o
|
obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o
|
||||||
obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o
|
obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o
|
||||||
obj-$(CONFIG_XFRM_USER) += xfrm_user.o
|
obj-$(CONFIG_XFRM_USER) += xfrm_user.o
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* xfrm_device.c - IPsec device offloading code.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 secunet Security Networks AG
|
||||||
|
*
|
||||||
|
* Author:
|
||||||
|
* Steffen Klassert <steffen.klassert@secunet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version
|
||||||
|
* 2 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
|
#include <linux/skbuff.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/spinlock.h>
|
||||||
|
#include <net/dst.h>
|
||||||
|
#include <net/xfrm.h>
|
||||||
|
#include <linux/notifier.h>
|
||||||
|
|
||||||
|
static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
|
||||||
|
{
|
||||||
|
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case NETDEV_DOWN:
|
||||||
|
xfrm_garbage_collect(dev_net(dev));
|
||||||
|
}
|
||||||
|
return NOTIFY_DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct notifier_block xfrm_dev_notifier = {
|
||||||
|
.notifier_call = xfrm_dev_event,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __net_init xfrm_dev_init(void)
|
||||||
|
{
|
||||||
|
register_netdevice_notifier(&xfrm_dev_notifier);
|
||||||
|
}
|
|
@ -2929,21 +2929,6 @@ void xfrm_policy_unregister_afinfo(const struct xfrm_policy_afinfo *afinfo)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(xfrm_policy_unregister_afinfo);
|
EXPORT_SYMBOL(xfrm_policy_unregister_afinfo);
|
||||||
|
|
||||||
static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
|
|
||||||
{
|
|
||||||
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
|
|
||||||
|
|
||||||
switch (event) {
|
|
||||||
case NETDEV_DOWN:
|
|
||||||
xfrm_garbage_collect(dev_net(dev));
|
|
||||||
}
|
|
||||||
return NOTIFY_DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct notifier_block xfrm_dev_notifier = {
|
|
||||||
.notifier_call = xfrm_dev_event,
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_XFRM_STATISTICS
|
#ifdef CONFIG_XFRM_STATISTICS
|
||||||
static int __net_init xfrm_statistics_init(struct net *net)
|
static int __net_init xfrm_statistics_init(struct net *net)
|
||||||
{
|
{
|
||||||
|
@ -3020,7 +3005,7 @@ static int __net_init xfrm_policy_init(struct net *net)
|
||||||
INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize);
|
INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize);
|
||||||
INIT_WORK(&net->xfrm.policy_hthresh.work, xfrm_hash_rebuild);
|
INIT_WORK(&net->xfrm.policy_hthresh.work, xfrm_hash_rebuild);
|
||||||
if (net_eq(net, &init_net))
|
if (net_eq(net, &init_net))
|
||||||
register_netdevice_notifier(&xfrm_dev_notifier);
|
xfrm_dev_init();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_bydst:
|
out_bydst:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче