summaryrefslogtreecommitdiff
path: root/src/ndisc/nm-lndp-ndisc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ndisc/nm-lndp-ndisc.c')
-rw-r--r--src/ndisc/nm-lndp-ndisc.c64
1 files changed, 53 insertions, 11 deletions
diff --git a/src/ndisc/nm-lndp-ndisc.c b/src/ndisc/nm-lndp-ndisc.c
index 25666c2e45..0d78a5356b 100644
--- a/src/ndisc/nm-lndp-ndisc.c
+++ b/src/ndisc/nm-lndp-ndisc.c
@@ -550,6 +550,51 @@ ipv6_sysctl_get (NMPlatform *platform, const char *ifname, const char *property,
defval);
}
+void
+nm_lndp_ndisc_get_sysctl (NMPlatform *platform,
+ const char *ifname,
+ int *out_max_addresses,
+ int *out_router_solicitations,
+ int *out_router_solicitation_interval,
+ guint32 *out_default_ra_timeout)
+{
+ int router_solicitation_interval = 0;
+ int router_solicitations = 0;
+
+ if (out_max_addresses) {
+ *out_max_addresses = ipv6_sysctl_get (platform,
+ ifname,
+ "max_addresses",
+ 0,
+ G_MAXINT32,
+ NM_NDISC_MAX_ADDRESSES_DEFAULT);
+ }
+ if (out_router_solicitations || out_default_ra_timeout) {
+ router_solicitations = ipv6_sysctl_get (platform,
+ ifname,
+ "router_solicitations",
+ 1,
+ G_MAXINT32,
+ NM_NDISC_ROUTER_SOLICITATIONS_DEFAULT);
+ NM_SET_OUT (out_router_solicitations, router_solicitations);
+ }
+ if (out_router_solicitation_interval || out_default_ra_timeout) {
+ router_solicitation_interval = ipv6_sysctl_get (platform,
+ ifname,
+ "router_solicitation_interval",
+ 1,
+ G_MAXINT32,
+ NM_NDISC_ROUTER_SOLICITATION_INTERVAL_DEFAULT);
+ NM_SET_OUT (out_router_solicitation_interval, router_solicitation_interval);
+ }
+ if (out_default_ra_timeout) {
+ *out_default_ra_timeout = NM_MAX ((((gint64) router_solicitations) * router_solicitation_interval) + 1,
+ 30);
+ }
+}
+
+/*****************************************************************************/
+
static void
nm_lndp_ndisc_init (NMLndpNDisc *lndp_ndisc)
{
@@ -563,7 +608,10 @@ nm_lndp_ndisc_new (NMPlatform *platform,
const char *network_id,
NMSettingIP6ConfigAddrGenMode addr_gen_mode,
NMNDiscNodeType node_type,
- gint32 ra_timeout,
+ int max_addresses,
+ int router_solicitations,
+ int router_solicitation_interval,
+ guint32 ra_timeout,
GError **error)
{
nm_auto_pop_netns NMPNetns *netns = NULL;
@@ -586,16 +634,10 @@ nm_lndp_ndisc_new (NMPlatform *platform,
NM_NDISC_NETWORK_ID, network_id,
NM_NDISC_ADDR_GEN_MODE, (int) addr_gen_mode,
NM_NDISC_NODE_TYPE, (int) node_type,
- NM_NDISC_MAX_ADDRESSES, ipv6_sysctl_get (platform, ifname,
- "max_addresses",
- 0, G_MAXINT32, NM_NDISC_MAX_ADDRESSES_DEFAULT),
- NM_NDISC_RA_TIMEOUT, (int) ra_timeout,
- NM_NDISC_ROUTER_SOLICITATIONS, ipv6_sysctl_get (platform, ifname,
- "router_solicitations",
- 1, G_MAXINT32, NM_NDISC_ROUTER_SOLICITATIONS_DEFAULT),
- NM_NDISC_ROUTER_SOLICITATION_INTERVAL, ipv6_sysctl_get (platform, ifname,
- "router_solicitation_interval",
- 1, G_MAXINT32, NM_NDISC_ROUTER_SOLICITATION_INTERVAL_DEFAULT),
+ NM_NDISC_MAX_ADDRESSES, max_addresses,
+ NM_NDISC_ROUTER_SOLICITATIONS, router_solicitations,
+ NM_NDISC_ROUTER_SOLICITATION_INTERVAL, router_solicitation_interval,
+ NM_NDISC_RA_TIMEOUT, (guint) ra_timeout,
NULL);
priv = NM_LNDP_NDISC_GET_PRIVATE (ndisc);