内核模块逻辑

  • 指定模块初始化的入口函数 wg_device_init
  • 注册虚拟网络设备 rtnl_link_register(&link_ops)
  • net_device 结构体的初始化操作 wg_setup
  • 指定 ip link add 命令时对应的初始化操作(是主要的功能逻辑所在) wg_newlink
  • 指定虚拟网络设备启动时的操作 wg_open
  • 指定虚拟网络设备停止时的操作 wg_stop
  • 指定虚拟网络设备开始发送第一个封包的操作 wg_xmit
  • wireguard 初始化的操作是:
    • 通过 ip link add dev wg0 type wireguard 添加虚拟网络设备
    • 通过 ip addr add 10.0.0.4/24 dev wg0 配置虚拟网络设备地址
    • 通过 wg set wg0 添加 wireguard 配置
    • 通过 ip link set wg0 up 启动虚拟网络设备
  • 因此我们应先看 wg_newlink 的逻辑,再看 wg_open 的逻辑