diff options
Diffstat (limited to 'src/ip6-manager')
| -rw-r--r-- | src/ip6-manager/Makefile.am | 7 | ||||
| -rw-r--r-- | src/ip6-manager/Makefile.in | 18 | ||||
| -rw-r--r-- | src/ip6-manager/nm-ip6-manager.c | 63 |
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: |