Hi dear developers of WireGuard! Recently, I've been reading the source code of WireGuard. The function name like ipc_get_device() looks to be a little bit misleading. To make the code more readable for new developers, here are some suggestions: Rename ipc_get_device(&dev) to ipc_fetch_conf(&conf) because it only fetches the runtime configuations from kernel. Change funtion prototype ipc_set_device(struct wgdevice *dev) to ipc_set_device(const struct wgdevice *newconf). Change the following IPC function names and parameters which used to be confusing: - ipc_set_device(dev) => ipc_set_device(newconf) - ipc_get_device(dev, interface) => ipc_fetch_conf(conf, interface) - kernel_set_device(dev) => kernel_set_device(newconf) - kernel_get_device(device, interface) => kernel_fetch_conf(conf, interface) - userspace_set_device(dev) => userspace_set_device(newconf) - userspace_get_device(out, interface) => userspace_fetch_conf(out, interface) - free_wgdevice(dev) => free_conf(conf) Renamed local variable/parameter symbols: In showconf_main(), show_main(): device => conf In ipc_fetch_conf(), kernel_fetch_conf(), userspace_fetch_conf(): dev => conf In ipc_set_device(), kernel_set_device(), userspace_set_device(): dev => newconf Note: A lot of braces are added to the if-else code blocks to keep ourselves from making unexpected mistakes in the future. Changed function prototypes: int ipc_set_device(struct wgdevice *) => int ipc_set_device(const struct wgdevice *newconf) int kernel_set_device(struct wgdevice *) => int kernel_set_device(const struct wgdevice *newconf) int userspace_set_device(struct wgdevice *) => int userspace_set_device(const struct wgdevice *newconf) Added function: free_conf() Patch code is both in the email attachment and on github.com ( https://github.com/WireGuard/WireGuard/pull/5/files ) Please tell me anything you thought, I would be glad to help. Happy hacking! ------------------ -- Liu Qun from Tsingtao, China