• Patrick Rohr's avatar
    net: change accept_ra_min_rtr_lft to affect all RA lifetimes · 5027d54a
    Patrick Rohr authored
    accept_ra_min_rtr_lft only considered the lifetime of the default route
    and discarded entire RAs accordingly.
    
    This change renames accept_ra_min_rtr_lft to accept_ra_min_lft, and
    applies the value to individual RA sections; in particular, router
    lifetime, PIO preferred lifetime, and RIO lifetime. If any of those
    lifetimes are lower than the configured value, the specific RA section
    is ignored.
    
    In order for the sysctl to be useful to Android, it should really apply
    to all lifetimes in the RA, since that is what determines the minimum
    frequency at which RAs must be processed by the kernel. Android uses
    hardware offloads to drop RAs for a fraction of the minimum of all
    lifetimes present in the RA (some networks have very frequent RAs (5s)
    with high lifetimes (2h)). Despite this, we have encountered networks
    that set the router lifetime to 30s which results in very frequent CPU
    wakeups. Instead of disabling IPv6 (and dropping IPv6 ethertype in the
    WiFi firmware) entirely on such networks, it seems better to ignore the
    misconfigured routers while still processing RAs from other IPv6 routers
    on the same network (i.e. to support IoT applications).
    
    The previous implementation dropped the entire RA based on router
    lifetime. This turned out to be hard to expand to the other lifetimes
    present in the RA in a consistent manner; dropping the entire RA based
    on RIO/PIO lifetimes would essentially require parsing the whole thing
    twice.
    
    Fixes: 1671bcfd ("net: add sysctl accept_ra_min_rtr_lft")
    Cc: Lorenzo Colitti <lorenzo@google.com>
    Signed-off-by: default avatarPatrick Rohr <prohr@google.com>
    Reviewed-by: default avatarMaciej Żenczykowski <maze@google.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20230726230701.919212-1-prohr@google.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5027d54a
ndisc.c 52.3 KB