Newer
Older
ASS_NetModule / Netdevice / netdev.c
@Motoki Motoki 2 days ago 1 KB message
#include <linux/module.h>
#include <linux/netdevice.h>

static int my_netdev_event(struct notifier_block *nb,
                           unsigned long event, void *ptr)
{
    struct net_device *dev = netdev_notifier_info_to_dev(ptr);

    switch (event) {
    case NETDEV_REGISTER:
        pr_info("netdev: %s registered\n", dev->name);
        break;
    case NETDEV_UNREGISTER:
        pr_info("netdev: %s unregistered\n", dev->name);
        break;
    case NETDEV_UP:
        pr_info("netdev: %s is UP\n", dev->name);
        break;
    case NETDEV_DOWN:
        pr_info("netdev: %s is DOWN\n", dev->name);
        break;
    case NETDEV_CHANGE:
        pr_info("netdev: %s state changed\n", dev->name);
        break;
    default:
        break;
    }

    return NOTIFY_DONE;
}

static struct notifier_block my_nb = {
    .notifier_call = my_netdev_event,
};

static int __init mymod_init(void)
{
    int ret;

    ret = register_netdevice_notifier(&my_nb);
    if (ret)
        pr_err("netdev: register_netdevice_notifier failed: %d\n", ret);
    else
        pr_info("netdev: loaded\n");

    return ret;
}

static void __exit mymod_exit(void)
{
    unregister_netdevice_notifier(&my_nb);
    pr_info("netdev: unloaded\n");
}

module_init(mymod_init);
module_exit(mymod_exit);

MODULE_LICENSE("GPL");