On Wed, 2017-04-05 at 11:26 +0200, Maximilian Moser wrote: > Good Day, > > My name is Maximilian Moser and I am a CS (software engineering) > student at the Vienna University of Technology. > For my Bachelor's Thesis, I was asked to write a plugin for > NetworkManager to support the VPN client wireguard (https://www.wireg > uard.io/). > > As is usually the case, getting started might just be the hardest > part; at least I found that the internet is not exactly bursting with > introductions on how to write nm plugins. > > Therefore, I'd like to ask if you could give me any hints at how to > get this project on its feet :) > > Thanks in advance and > Best regards, > Max >
Hi Max, It seems quite a large project for a Bachelor Thesis to me. But we would very much like to get such a plugin, so great if you can pull this off!! :) The VPN plugins implement a rather simple D-Bus API, so in principle that can be done in a multitude of ways. However, the way all plugins came into existence is by copying an existing plugin and adjust it. That means in all existing cases: C + glib (+ gtk for the GUI integration). The ones that I think are most up-to-date regarding current best practices are (IMO) https://git.gnome.org/browse/network-manager-openvpn/ https://git.gnome.org/browse/network-manager-libreswan/ openvpn is rather large, very likely wireguard would be much simpler, so basing your initial version on NetworkManager-openvpn means you probably will delete a lot of code. Still, I think openvpn is the most idiomatic one, so that one might be a good start. Note that plasma-nm re-implements the client part of the VPN plugins: https://github.com/KDE/plasma-nm/tree/master/vpn Recently the client-libraries got split in a core-part (libnm-vpn- plugin-openvpn.so) and a GTK part (libnm-vpn-plugin-openvpn-editor.so). IMO nowadays, it would be preferred if QT would not re-implement the core part -- to do import/export -- but only add the GUI part on top of it). Also because, one day the core part hopefully get additional functionality. When building a VPN plugin, you can install it also in a private path like --prefix=/opt/nm-plugin. I do that usually, because I don't want to mess up my system with files outside the packagement system. That works, but you need to tell NetworkManager that the plugin exists. Basically, copy a file like "nm-openvpn-service.name" to /usr/lib/NetworkManager/VPN. If you just want the client-side integration (for nmcli, nm-connection- editor, gnome-shell), you can also instead set the environment variable: $ NM_VPN_PLUGIN_DIR=/opt/nm-plugin/lib/NetworkManager/VPN/ nm-connection-editor (when doing that, also `./configure --enable-absolute-paths`). Also note that all plugins currently come with two flavors of the client library: one for libnm.so and one for libnm-glib.so/libnm- util.so. The latter one is deprecated and exists for supporting older versions of nm-connection-editor. Probably you don't have to care about that and can just strip it out. Grep for NM_VPN_OLD... but then you see, that it isn't too invasive either, so maybe it's not too hard to support that too. See also https://wiki.gnome.org/Projects/NetworkManager/VPN and https://wiki.gnome.org/Projects/NetworkManager/Hacking Meet us on IRC (#nm on freenode). best, Thomas
signature.asc
Description: This is a digitally signed message part
_______________________________________________ networkmanager-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/networkmanager-list
