main.c 1.6 KB

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