if ((c = tb[IFACE_ATTR_RA_REACHABLETIME])) {
uint32_t ra_reachabletime = blobmsg_get_u32(c);
- if (ra_reachabletime <= 3600000)
- iface->ra_reachabletime = ra_reachabletime;
- else
- syslog(LOG_ERR, "Invalid %s value configured for interface '%s'",
- iface_attrs[IFACE_ATTR_RA_REACHABLETIME].name, iface->name);
+ /* RFC4861 §6.2.1 : AdvReachableTime :
+ * MUST be no greater than 3,600,000 msec
+ */
+ iface->ra_reachabletime = ra_reachabletime <= AdvReachableTime ? ra_reachabletime : AdvReachableTime;
+ if(ra_reachabletime > AdvReachableTime)
+ syslog(LOG_WARNING, "Clamped invalid %s value configured for interface '%s' to %d",
+ iface_attrs[IFACE_ATTR_RA_REACHABLETIME].name, iface->name, iface->ra_reachabletime);
}
if ((c = tb[IFACE_ATTR_RA_RETRANSTIME])) {
define is used to cap values to a sane ceiling, i.e. ND_VALID_LIMIT.
*/
#define RouterLifetime 5400
+/* RFC4861 §6.2.1 : AdvReachableTime :
+ * MUST be no greater than 3,600,000 msec
+ */
+#define AdvReachableTime 3600000
#define ND_RA_FLAG_PROXY 0x4
#define ND_RA_PREF_HIGH (1 << 3)