diff options
| author | Michael Biebl <biebl@debian.org> | 2016-03-30 00:56:30 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2016-03-30 00:56:30 +0200 |
| commit | d9c99a29a0d3384c9c3d2adce430f5cb1134ab6a (patch) | |
| tree | fa41baf72753961e71dd8d5bdbe2b89c9109e4f1 /src/rdisc/nm-lndp-rdisc.c | |
| parent | c2de0d98ba39e0a1a970d066fd19be786092f376 (diff) | |
Imported Upstream version 1.1.92 upstream/1.1.92
Diffstat (limited to 'src/rdisc/nm-lndp-rdisc.c')
| -rw-r--r-- | src/rdisc/nm-lndp-rdisc.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/rdisc/nm-lndp-rdisc.c b/src/rdisc/nm-lndp-rdisc.c index 06863462..27fd2f83 100644 --- a/src/rdisc/nm-lndp-rdisc.c +++ b/src/rdisc/nm-lndp-rdisc.c @@ -31,6 +31,7 @@ #include "NetworkManagerUtils.h" #include "nm-platform.h" +#include "nmp-netns.h" #define _NMLOG_PREFIX_NAME "rdisc-lndp" @@ -273,9 +274,14 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) static gboolean event_ready (GIOChannel *source, GIOCondition condition, NMRDisc *rdisc) { + nm_auto_pop_netns NMPNetns *netns = NULL; NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc); _LOGD ("processing libndp events"); + + if (!nm_rdisc_netns_push (rdisc, &netns)) + return G_SOURCE_CONTINUE; + ndp_callall_eventfd_handler (priv->ndp); return G_SOURCE_CONTINUE; } @@ -298,40 +304,50 @@ start (NMRDisc *rdisc) /******************************************************************/ static inline gint32 -ipv6_sysctl_get (const char *ifname, const char *property, gint32 defval) +ipv6_sysctl_get (NMPlatform *platform, const char *ifname, const char *property, gint32 defval) { - return nm_platform_sysctl_get_int32 (NM_PLATFORM_GET, nm_utils_ip6_property_path (ifname, property), defval); + return nm_platform_sysctl_get_int32 (platform, nm_utils_ip6_property_path (ifname, property), defval); } NMRDisc * -nm_lndp_rdisc_new (int ifindex, +nm_lndp_rdisc_new (NMPlatform *platform, + int ifindex, const char *ifname, const char *uuid, NMSettingIP6ConfigAddrGenMode addr_gen_mode, GError **error) { + nm_auto_pop_netns NMPNetns *netns = NULL; NMRDisc *rdisc; NMLNDPRDiscPrivate *priv; int errsv; + g_return_val_if_fail (NM_IS_PLATFORM (platform), NULL); g_return_val_if_fail (!error || !*error, NULL); - rdisc = g_object_new (NM_TYPE_LNDP_RDISC, NULL); + if (!nm_platform_netns_push (platform, &netns)) + return NULL; + + rdisc = g_object_new (NM_TYPE_LNDP_RDISC, + NM_RDISC_PLATFORM, platform, + NULL); rdisc->ifindex = ifindex; rdisc->ifname = g_strdup (ifname); rdisc->uuid = g_strdup (uuid); rdisc->addr_gen_mode = addr_gen_mode; - rdisc->max_addresses = ipv6_sysctl_get (ifname, "max_addresses", + rdisc->max_addresses = ipv6_sysctl_get (platform, ifname, "max_addresses", NM_RDISC_MAX_ADDRESSES_DEFAULT); - rdisc->rtr_solicitations = ipv6_sysctl_get (ifname, "router_solicitations", + rdisc->rtr_solicitations = ipv6_sysctl_get (platform, ifname, "router_solicitations", NM_RDISC_RTR_SOLICITATIONS_DEFAULT); - rdisc->rtr_solicitation_interval = ipv6_sysctl_get (ifname, "router_solicitation_interval", + rdisc->rtr_solicitation_interval = ipv6_sysctl_get (platform, ifname, "router_solicitation_interval", NM_RDISC_RTR_SOLICITATION_INTERVAL_DEFAULT); priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc); + errsv = ndp_open (&priv->ndp); + if (errsv != 0) { errsv = errsv > 0 ? errsv : -errsv; g_set_error (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN, |