[network-manager-libreswan] service: handle the eclipse route properly
- From: Lubomir Rintel <lkundrak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [network-manager-libreswan] service: handle the eclipse route properly
- Date: Mon, 1 Feb 2016 09:09:27 +0000 (UTC)
commit 2163138a8275c1f859edd642e6790282df273eea
Author: Lubomir Rintel <lkundrak v3 sk>
Date: Sun Jan 31 23:26:38 2016 +0100
service: handle the eclipse route properly
src/nm-libreswan-service.c | 79 +++++++++++++++++++++++++------------------
1 files changed, 46 insertions(+), 33 deletions(-)
---
diff --git a/src/nm-libreswan-service.c b/src/nm-libreswan-service.c
index 4e3773e..0e1a76a 100644
--- a/src/nm-libreswan-service.c
+++ b/src/nm-libreswan-service.c
@@ -1018,37 +1018,6 @@ lookup_string (GVariant *dict, const gchar *key)
return value;
}
-static GVariant *
-route_to_gvariant (GVariant *env)
-{
- GVariantBuilder builder;
-
- if (!lookup_string (env, "PLUTO_PEER_CLIENT"))
- return NULL;
-
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
-
-#define _try_add(builder, variant) \
- G_STMT_START { \
- GVariant *_v = (variant); \
- \
- if (!_v) \
- goto fail; \
- g_variant_builder_add_value ((builder), _v); \
- } G_STMT_END
- _try_add (&builder, addr4_to_gvariant (lookup_string (env, "PLUTO_PEER_CLIENT_NET")));
- _try_add (&builder, netmask4_to_gvariant (lookup_string (env, "PLUTO_PEER_CLIENT_MASK")));
- _try_add (&builder, addr4_to_gvariant (lookup_string (env, "PLUTO_NEXT_HOP")));
- _try_add (&builder, g_variant_new_uint32 (0));
- _try_add (&builder, addr4_to_gvariant (lookup_string (env, "PLUTO_MY_SOURCEIP")));
-#undef _try_add
-
- return g_variant_builder_end (&builder);
-fail:
- g_variant_builder_clear (&builder);
- return NULL;
-}
-
static void
_take_route (GPtrArray *routes, GVariant *new, gboolean alive)
{
@@ -1085,6 +1054,50 @@ _take_route (GPtrArray *routes, GVariant *new, gboolean alive)
g_variant_unref (new);
}
+static void
+handle_route (GPtrArray *routes, GVariant *env, gboolean alive)
+{
+ GVariantBuilder builder;
+ const gchar *net, *mask, *next_hop, *my_sourceip;
+
+ if (!lookup_string (env, "PLUTO_PEER_CLIENT"))
+ return;
+
+ net = lookup_string (env, "PLUTO_PEER_CLIENT_NET");
+ mask = lookup_string (env, "PLUTO_PEER_CLIENT_MASK");
+ next_hop = lookup_string (env, "PLUTO_NEXT_HOP");
+ my_sourceip = lookup_string (env, "PLUTO_MY_SOURCEIP");
+
+ if (!net || !mask || !next_hop || !my_sourceip)
+ return;
+
+ if (g_strcmp0 (net, "0.0.0.0") == 0 && g_strcmp0 (mask, "0")) {
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant ("0.0.0.0"));
+ g_variant_builder_add_value (&builder, netmask4_to_gvariant ("128.0.0.0"));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (next_hop));
+ g_variant_builder_add_value (&builder, g_variant_new_uint32 (0));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (my_sourceip));
+ _take_route (routes, g_variant_builder_end (&builder), alive);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant ("128.0.0.0"));
+ g_variant_builder_add_value (&builder, netmask4_to_gvariant ("128.0.0.0"));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (next_hop));
+ g_variant_builder_add_value (&builder, g_variant_new_uint32 (0));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (my_sourceip));
+ _take_route (routes, g_variant_builder_end (&builder), alive);
+ } else {
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (net));
+ g_variant_builder_add_value (&builder, netmask4_to_gvariant (mask));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (next_hop));
+ g_variant_builder_add_value (&builder, g_variant_new_uint32 (0));
+ g_variant_builder_add_value (&builder, addr4_to_gvariant (my_sourceip));
+ _take_route (routes, g_variant_builder_end (&builder), alive);
+ }
+}
+
static gboolean
handle_callback (NMDBusLibreswanHelper *object,
GDBusMethodInvocation *invocation,
@@ -1178,9 +1191,9 @@ handle_callback (NMDBusLibreswanHelper *object,
/* This route */
if (g_strcmp0 (verb, "route-client") == 0 || g_strcmp0 (verb, "route-host"))
- _take_route (priv->routes, route_to_gvariant (env), TRUE);
+ handle_route (priv->routes, env, TRUE);
else if (g_strcmp0 (verb, "unroute-client") == 0 || g_strcmp0 (verb, "unroute-host"))
- _take_route (priv->routes, route_to_gvariant (env), FALSE);
+ handle_route (priv->routes, env, FALSE);
/* Routes */
g_variant_builder_init (&builder, G_VARIANT_TYPE ("aau"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]