Blame view

lib/netdev-notifier-error-inject.c 1.55 KB
09c434b8a   Thomas Gleixner   treewide: Add SPD...
1
  // SPDX-License-Identifier: GPL-2.0-only
02fff96a7   Nikolay Aleksandrov   net: add support ...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/netdevice.h>
  
  #include "notifier-error-inject.h"
  
  static int priority;
  module_param(priority, int, 0);
  MODULE_PARM_DESC(priority, "specify netdevice notifier priority");
  
  static struct notifier_err_inject netdev_notifier_err_inject = {
  	.actions = {
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_REGISTER) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_CHANGEMTU) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_CHANGENAME) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_PRE_UP) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_PRE_TYPE_CHANGE) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_POST_INIT) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_PRECHANGEMTU) },
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_PRECHANGEUPPER) },
c39d0454e   Ido Schimmel   net: Add support ...
22
  		{ NOTIFIER_ERR_INJECT_ACTION(NETDEV_CHANGEUPPER) },
02fff96a7   Nikolay Aleksandrov   net: add support ...
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  		{}
  	}
  };
  
  static struct dentry *dir;
  
  static int netdev_err_inject_init(void)
  {
  	int err;
  
  	dir = notifier_err_inject_init("netdev", notifier_err_inject_dir,
  				       &netdev_notifier_err_inject, priority);
  	if (IS_ERR(dir))
  		return PTR_ERR(dir);
  
  	err = register_netdevice_notifier(&netdev_notifier_err_inject.nb);
  	if (err)
  		debugfs_remove_recursive(dir);
  
  	return err;
  }
  
  static void netdev_err_inject_exit(void)
  {
  	unregister_netdevice_notifier(&netdev_notifier_err_inject.nb);
  	debugfs_remove_recursive(dir);
  }
  
  module_init(netdev_err_inject_init);
  module_exit(netdev_err_inject_exit);
  
  MODULE_DESCRIPTION("Netdevice notifier error injection module");
  MODULE_LICENSE("GPL");
  MODULE_AUTHOR("Nikolay Aleksandrov <razor@blackwall.org>");