1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4 */
5
6#include "version.h"
7#include "device.h"
8#include "noise.h"
9#include "queueing.h"
10#include "ratelimiter.h"
11#include "netlink.h"
12
13#include <uapi/linux/wireguard.h>
14
15#include <linux/init.h>
16#include <linux/module.h>
17#include <linux/genetlink.h>
18#include <net/rtnetlink.h>
19
20static int __init wg_mod_init(void)
21{
22 int ret;
23
24 ret = wg_allowedips_slab_init();
25 if (ret < 0)
26 goto err_allowedips;
27
28#ifdef DEBUG
29 ret = -ENOTRECOVERABLE;
30 if (!wg_allowedips_selftest() || !wg_packet_counter_selftest() ||
31 !wg_ratelimiter_selftest())
32 goto err_peer;
33#endif
34 wg_noise_init();
35
36 ret = wg_peer_init();
37 if (ret < 0)
38 goto err_peer;
39
40 ret = wg_device_init();
41 if (ret < 0)
42 goto err_device;
43
44 ret = wg_genetlink_init();
45 if (ret < 0)
46 goto err_netlink;
47
48 pr_info("WireGuard " WIREGUARD_VERSION " loaded. See www.wireguard.com for information.\n");
49 pr_info("Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.\n");
50
51 return 0;
52
53err_netlink:
54 wg_device_uninit();
55err_device:
56 wg_peer_uninit();
57err_peer:
58 wg_allowedips_slab_uninit();
59err_allowedips:
60 return ret;
61}
62
63static void __exit wg_mod_exit(void)
64{
65 wg_genetlink_uninit();
66 wg_device_uninit();
67 wg_peer_uninit();
68 wg_allowedips_slab_uninit();
69}
70
71module_init(wg_mod_init);
72module_exit(wg_mod_exit);
73MODULE_LICENSE("GPL v2");
74MODULE_DESCRIPTION("WireGuard secure network tunnel");
75MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
76MODULE_VERSION(WIREGUARD_VERSION);
77MODULE_ALIAS_RTNL_LINK(KBUILD_MODNAME);
78MODULE_ALIAS_GENL_FAMILY(WG_GENL_NAME);
79

source code of linux/drivers/net/wireguard/main.c