about summary refs log tree commit diff
path: root/src/ip6-manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/ip6-manager')
-rw-r--r--src/ip6-manager/Makefile.am7
-rw-r--r--src/ip6-manager/Makefile.in18
-rw-r--r--src/ip6-manager/nm-ip6-manager.c63
3 files changed, 72 insertions, 16 deletions
diff --git a/src/ip6-manager/Makefile.am b/src/ip6-manager/Makefile.am
index b98d6def..016fc25d 100644
--- a/src/ip6-manager/Makefile.am
+++ b/src/ip6-manager/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = \
 	-I${top_srcdir} \
 	-I${top_srcdir}/include \
-	-I${top_builddir}/marshallers \
+	-I${top_builddir}/include \
 	-I${top_srcdir}/libnm-util \
+	-I${top_builddir}/libnm-util \
+	-I${top_srcdir}/src/generated \
+	-I${top_builddir}/src/generated \
 	-I${top_srcdir}/src/logging \
 	-I${top_srcdir}/src
 
@@ -19,7 +22,7 @@ libip6_manager_la_CPPFLAGS = \
 	-DG_DISABLE_DEPRECATED
 
 libip6_manager_la_LIBADD = \
-	$(top_builddir)/marshallers/libmarshallers.la \
+	$(top_builddir)/src/generated/libnm-generated.la \
 	$(top_builddir)/src/logging/libnm-logging.la \
 	$(LIBNL_LIBS) \
 	$(DBUS_LIBS) \
diff --git a/src/ip6-manager/Makefile.in b/src/ip6-manager/Makefile.in
index 6eb818c0..59c2e7b4 100644
--- a/src/ip6-manager/Makefile.in
+++ b/src/ip6-manager/Makefile.in
@@ -57,7 +57,7 @@ CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libip6_manager_la_DEPENDENCIES =  \
-	$(top_builddir)/marshallers/libmarshallers.la \
+	$(top_builddir)/src/generated/libnm-generated.la \
 	$(top_builddir)/src/logging/libnm-logging.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
@@ -142,6 +142,8 @@ GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MAKEFILE = @GLIB_MAKEFILE@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GMODULE_CFLAGS = @GMODULE_CFLAGS@
 GMODULE_LIBS = @GMODULE_LIBS@
 GMSGFMT = @GMSGFMT@
@@ -196,11 +198,15 @@ LIBNL2_LIBS = @LIBNL2_LIBS@
 LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
 LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
+LIBNL_GENL3_CFLAGS = @LIBNL_GENL3_CFLAGS@
+LIBNL_GENL3_LIBS = @LIBNL_GENL3_LIBS@
 LIBNL_LIBS = @LIBNL_LIBS@
 LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@
 LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
 LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
@@ -211,6 +217,7 @@ MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
+MOC = @MOC@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
@@ -250,6 +257,8 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
 SYSTEM_CA_PATH = @SYSTEM_CA_PATH@
 UDEV_BASE_DIR = @UDEV_BASE_DIR@
 USE_NLS = @USE_NLS@
@@ -316,8 +325,11 @@ top_srcdir = @top_srcdir@
 INCLUDES = \
 	-I${top_srcdir} \
 	-I${top_srcdir}/include \
-	-I${top_builddir}/marshallers \
+	-I${top_builddir}/include \
 	-I${top_srcdir}/libnm-util \
+	-I${top_builddir}/libnm-util \
+	-I${top_srcdir}/src/generated \
+	-I${top_builddir}/src/generated \
 	-I${top_srcdir}/src/logging \
 	-I${top_srcdir}/src
 
@@ -333,7 +345,7 @@ libip6_manager_la_CPPFLAGS = \
 	-DG_DISABLE_DEPRECATED
 
 libip6_manager_la_LIBADD = \
-	$(top_builddir)/marshallers/libmarshallers.la \
+	$(top_builddir)/src/generated/libnm-generated.la \
 	$(top_builddir)/src/logging/libnm-logging.la \
 	$(LIBNL_LIBS) \
 	$(DBUS_LIBS) \
diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c
index 503dab51..99f85ede 100644
--- a/src/ip6-manager/nm-ip6-manager.c
+++ b/src/ip6-manager/nm-ip6-manager.c
@@ -91,7 +91,7 @@ typedef struct {
 
 	char *disable_ip6_path;
 	gboolean disable_ip6_save_valid;
-	guint32 disable_ip6_save;
+	gint32 disable_ip6_save;
 
 	guint finish_addrconf_id;
 	guint config_changed_id;
@@ -112,6 +112,14 @@ typedef struct {
 } NMIP6Device;
 
 static void
+clear_config_changed (NMIP6Device *device)
+{
+	if (device->config_changed_id)
+		g_source_remove (device->config_changed_id);
+	device->config_changed_id = 0;
+}
+
+static void
 nm_ip6_device_destroy (NMIP6Device *device)
 {
 	g_return_if_fail (device != NULL);
@@ -124,8 +132,9 @@ nm_ip6_device_destroy (NMIP6Device *device)
 
 	if (device->finish_addrconf_id)
 		g_source_remove (device->finish_addrconf_id);
-	if (device->config_changed_id)
-		g_source_remove (device->config_changed_id);
+
+	clear_config_changed (device);
+
 	g_free (device->iface);
 	if (device->rdnss_servers)
 		g_array_free (device->rdnss_servers, TRUE);
@@ -176,9 +185,10 @@ nm_ip6_device_new (NMIP6Manager *manager, int ifindex)
 	device->disable_ip6_path = g_strdup_printf ("/proc/sys/net/ipv6/conf/%s/disable_ipv6",
 	                                            device->iface);
 	g_assert (device->disable_ip6_path);
-	device->disable_ip6_save_valid = nm_utils_get_proc_sys_net_value (device->disable_ip6_path,
-	                                                                  device->iface,
-	                                                                  &device->disable_ip6_save);
+	device->disable_ip6_save_valid = nm_utils_get_proc_sys_net_value_with_bounds (device->disable_ip6_path,
+	                                                                              device->iface,
+	                                                                              &device->disable_ip6_save,
+	                                                                              0, 1);
 
 	return device;
 
@@ -267,6 +277,7 @@ rdnss_expired (gpointer user_data)
 	nm_log_dbg (LOGD_IP6, "(%s): IPv6 RDNSS information expired", device->iface);
 
 	set_rdnss_timeout (device);
+	clear_config_changed (device);
 	emit_config_changed (&info);
 	return FALSE;
 }
@@ -321,11 +332,12 @@ static gboolean
 dnssl_expired (gpointer user_data)
 {
 	NMIP6Device *device = user_data;
-	CallbackInfo info = { device, IP6_DHCP_OPT_NONE };
+	CallbackInfo info = { device, IP6_DHCP_OPT_NONE, FALSE };
 
 	nm_log_dbg (LOGD_IP6, "(%s): IPv6 DNSSL information expired", device->iface);
 
 	set_dnssl_timeout (device);
+	clear_config_changed (device);
 	emit_config_changed (&info);
 	return FALSE;
 }
@@ -434,8 +446,9 @@ nm_ip6_device_sync_from_netlink (NMIP6Device *device, gboolean config_changed)
 		addr = nl_addr_get_binary_addr (nladdr);
 
 		if (inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN) > 0) {
-			nm_log_dbg (LOGD_IP6, "(%s): netlink address: %s",
-			            device->iface, buf);
+			nm_log_dbg (LOGD_IP6, "(%s): netlink address: %s/%d",
+			            device->iface, buf,
+			            rtnl_addr_get_prefixlen (rtnladdr));
 		}
 
 		if (IN6_IS_ADDR_LINKLOCAL (addr)) {
@@ -972,6 +985,28 @@ static struct nla_policy link_prot_policy[IFLA_INET6_MAX + 1] = {
 	[IFLA_INET6_FLAGS]	= { .type = NLA_U32 },
 };
 
+static char *
+ra_flags_to_string (guint32 ra_flags)
+{
+	GString *s = g_string_sized_new (20);
+
+	g_string_append (s, " (");
+	if (ra_flags & IF_RS_SENT)
+		g_string_append_c (s, 'S');
+
+	if (ra_flags & IF_RA_RCVD)
+		g_string_append_c (s, 'R');
+
+	if (ra_flags & IF_RA_OTHERCONF)
+		g_string_append_c (s, 'O');
+
+	if (ra_flags & IF_RA_MANAGED)
+		g_string_append_c (s, 'M');
+
+	g_string_append_c (s, ')');
+	return g_string_free (s, FALSE);
+}
+
 static NMIP6Device *
 process_newlink (NMIP6Manager *manager, struct nl_msg *msg)
 {
@@ -981,6 +1016,7 @@ process_newlink (NMIP6Manager *manager, struct nl_msg *msg)
 	struct nlattr *tb[IFLA_MAX + 1];
 	struct nlattr *pi[IFLA_INET6_MAX + 1];
 	int err;
+	char *flags_str = NULL;
 
 	/* FIXME: we have to do this manually for now since libnl doesn't yet
 	 * support the IFLA_PROTINFO attribute of NEWLINK messages.  When it does,
@@ -1024,7 +1060,12 @@ process_newlink (NMIP6Manager *manager, struct nl_msg *msg)
 	}
 
 	device->ra_flags = nla_get_u32 (pi[IFLA_INET6_FLAGS]);
-	nm_log_dbg (LOGD_IP6, "(%s): got IPv6 flags 0x%X", device->iface, device->ra_flags);
+
+	if (nm_logging_level_enabled (LOGL_DEBUG))
+		flags_str = ra_flags_to_string (device->ra_flags);
+	nm_log_dbg (LOGD_IP6, "(%s): got IPv6 flags 0x%X%s",
+	            device->iface, device->ra_flags, flags_str ? flags_str : "");
+	g_free (flags_str);
 
 	return device;
 }
@@ -1038,7 +1079,7 @@ netlink_notification (NMNetlinkMonitor *monitor, struct nl_msg *msg, gpointer us
 	gboolean config_changed = FALSE;
 
 	hdr = nlmsg_hdr (msg);
-	nm_log_dbg (LOGD_HW, "netlink notificate type %d", hdr->nlmsg_type);
+	nm_log_dbg (LOGD_HW, "netlink event type %d", hdr->nlmsg_type);
 	switch (hdr->nlmsg_type) {
 	case RTM_NEWADDR:
 	case RTM_DELADDR: