diff options
Diffstat (limited to 'src/ndisc/nm-lndp-ndisc.c')
-rw-r--r-- | src/ndisc/nm-lndp-ndisc.c | 64 |
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); |