</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>ReachableTimeSec=</varname></term>
+
+ <listitem>
+ <para>Configures the time, used in the Neighbor Unreachability Detection algorithm, for which
+ clients can assume a neighbor is reachable after having received a reachability confirmation. Takes
+ a time span in the range 0…4294967295 ms. When 0, clients will handle it as if the value wasn't
+ specified. Defaults to 0.</para>
+
+ <xi:include href="version-info.xml" xpointer="v256"/>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>RetransmitSec=</varname></term>
#define RADV_MAX_ROUTER_LIFETIME_USEC (9000 * USEC_PER_SEC)
#define RADV_DEFAULT_ROUTER_LIFETIME_USEC (3 * RADV_DEFAULT_MAX_TIMEOUT_USEC)
/* RFC 4861 section 4.2.
- * Retrans Timer
+ * Reachable Time and Retrans Timer
* 32-bit unsigned integer. The time, in milliseconds. */
-#define RADV_MAX_RETRANSMIT_USEC (UINT32_MAX * USEC_PER_MSEC)
+#define RADV_MAX_UINT32_MSEC_USEC (UINT32_MAX * USEC_PER_MSEC)
+#define RADV_MAX_REACHABLE_TIME_USEC RADV_MAX_UINT32_MSEC_USEC
+#define RADV_MAX_RETRANSMIT_USEC RADV_MAX_UINT32_MSEC_USEC
/* draft-ietf-6man-slaac-renum-02 section 4.1.1.
* AdvPreferredLifetime: max(AdvDefaultLifetime, 3 * MaxRtrAdvInterval)
* AdvValidLifetime: 2 * AdvPreferredLifetime */
DHCPPrefixDelegation.NetLabel, config_parse_string, CONFIG_PARSE_STRING_SAFE, offsetof(Network, dhcp_pd_netlabel)
DHCPPrefixDelegation.NFTSet, config_parse_nft_set, NFT_SET_PARSE_NETWORK, offsetof(Network, dhcp_pd_nft_set_context)
IPv6SendRA.RouterLifetimeSec, config_parse_router_lifetime, 0, offsetof(Network, router_lifetime_usec)
-IPv6SendRA.RetransmitSec, config_parse_router_retransmit, 0, offsetof(Network, router_retransmit_usec)
+IPv6SendRA.ReachableTimeSec, config_parse_router_uint32_msec_usec, 0, offsetof(Network, router_reachable_usec)
+IPv6SendRA.RetransmitSec, config_parse_router_uint32_msec_usec, 0, offsetof(Network, router_retransmit_usec)
IPv6SendRA.Managed, config_parse_bool, 0, offsetof(Network, router_managed)
IPv6SendRA.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information)
IPv6SendRA.RouterPreference, config_parse_router_preference, 0, 0
RADVPrefixDelegation router_prefix_delegation;
usec_t router_lifetime_usec;
uint8_t router_preference;
+ usec_t router_reachable_usec;
usec_t router_retransmit_usec;
uint8_t router_hop_limit;
bool router_managed;
return r;
}
+ r = sd_radv_set_reachable_time(link->radv, link->network->router_reachable_usec);
+ if (r < 0)
+ return r;
+
if (link->network->router_retransmit_usec > 0) {
r = sd_radv_set_retransmit(link->radv, link->network->router_retransmit_usec);
if (r < 0)
return 0;
}
-int config_parse_router_retransmit(
+int config_parse_router_uint32_msec_usec(
const char *unit,
const char *filename,
unsigned line,
void *data,
void *userdata) {
- usec_t usec, *router_retransmit_usec = ASSERT_PTR(data);
+ usec_t usec, *router_usec = ASSERT_PTR(data);
int r;
assert(filename);
assert(rvalue);
if (isempty(rvalue)) {
- *router_retransmit_usec = 0;
+ *router_usec = 0;
return 0;
}
}
if (usec != USEC_INFINITY &&
- usec > RADV_MAX_RETRANSMIT_USEC) {
+ usec > RADV_MAX_UINT32_MSEC_USEC) {
log_syntax(unit, LOG_WARNING, filename, line, 0,
"Invalid [%s] %s=, ignoring assignment: %s", section, lvalue, rvalue);
return 0;
}
- *router_retransmit_usec = usec;
+ *router_usec = usec;
return 0;
}
CONFIG_PARSER_PROTOTYPE(config_parse_router_prefix_delegation);
CONFIG_PARSER_PROTOTYPE(config_parse_router_lifetime);
-CONFIG_PARSER_PROTOTYPE(config_parse_router_retransmit);
+CONFIG_PARSER_PROTOTYPE(config_parse_router_uint32_msec_usec);
CONFIG_PARSER_PROTOTYPE(config_parse_router_preference);
CONFIG_PARSER_PROTOTYPE(config_parse_prefix);
CONFIG_PARSER_PROTOTYPE(config_parse_prefix_boolean);