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