On Sun, Jun 17, 2018 at 12:34:58PM +0100, Javier Arteaga wrote:
Add support for a new wireguard link type to the platform code. For now
this only covers querying existing links via genetlink and parsing them
into platform objects.
---
Notes:
Changes in v2->v3:
* Changed peers/allowedips from CList to arrays-of-structs
(GArray wrappers are used during genl parsing stage to handle reallocs)
* Wrote proper cmp/hash methods for peer objects
* Split off two patches not really specific to WireGuard
* Corrected WireGuard uapi identifier names
* Addressed a few other comments on v2
libnm-core/nm-core-types-internal.h | 25 +++
src/nm-types.h | 2 +
src/platform/nm-linux-platform.c | 315 ++++++++++++++++++++++++++++
src/platform/nm-platform.c | 124 +++++++++++
src/platform/nm-platform.h | 15 ++
src/platform/nmp-object.c | 219 +++++++++++++++++++
src/platform/nmp-object.h | 10 +
7 files changed, 710 insertions(+)
diff --git a/libnm-core/nm-core-types-internal.h b/libnm-core/nm-core-types-internal.h
index 4d43aaf45..f95652fa2 100644
--- a/libnm-core/nm-core-types-internal.h
+++ b/libnm-core/nm-core-types-internal.h
@@ -31,6 +31,31 @@ typedef struct {
guint32 to;
} NMVlanQosMapping;
+typedef struct {
+ NMIPAddr ip;
+ guint8 family;
+ guint8 cidr;
Just a nitpick, feel free to ignore, but perhaps 'mask' would be a better name than 'cidr'.
[...]
@@ -7103,6 +7416,8 @@ constructed (GObject *_object)
g_assert (!nle);
_LOGD ("Generic netlink socket established: port=%u, fd=%d", nl_socket_get_local_port (priv->genlh),
nl_socket_get_fd (priv->genlh));
+ priv->wireguard_family_id = _support_genl_family (priv->genlh, "wireguard");
+
Since the genl family id is already determined when needed (i.e. in wireguard_get_link_properties()), I don't think we need to do it here too.
+void
+nm_platform_lnk_wireguard_hash_update (const NMPlatformLnkWireguard *obj, NMHashState *h)
+{
+ nm_hash_update_vals (h,
+ obj->private_key,
+ obj->public_key,
+ obj->listen_port,
+ obj->fwmark);
+}
This gives the following compile error here:
CC src/platform/src_libNetworkManagerBase_la-nm-platform.lo
In file included from ./shared/nm-default.h:292,
from src/platform/nm-platform.c:21:
src/platform/nm-platform.c: In function ‘nm_platform_lnk_wireguard_hash_update’:
./shared/nm-utils/nm-hash-utils.h:121:57: error: initialization of ‘unsigned char’ from ‘const guint8 *’ {aka
‘const unsigned char *’} makes integer from pointer without a cast [-Werror=int-conversion]
#define _NM_HASH_COMBINE_VALS_val_x_4( y, ...) ._v4 = (y), _NM_HASH_COMBINE_VALS_val_x_3 (__VA_ARGS__)
because private and public keys are guint8[]; I think you should use
nm_hash_update() for them.
The rest LGTM, thanks.
Beniamino
Attachment:
signature.asc
Description: PGP signature