• Guillaume Nault's avatar
    ipv4: Avoid using RTO_ONLINK with ip_route_connect(). · 67e1e2f4
    Guillaume Nault authored
    Now that ip_rt_fix_tos() doesn't reset ->flowi4_scope unconditionally,
    we don't have to rely on the RTO_ONLINK bit to properly set the scope
    of a flowi4 structure. We can just set ->flowi4_scope explicitly and
    avoid using RTO_ONLINK in ->flowi4_tos.
    
    This patch converts callers of ip_route_connect(). Instead of setting
    the tos parameter with RT_CONN_FLAGS(sk), as all callers do, we can:
    
      1- Drop the tos parameter from ip_route_connect(): its value was
         entirely based on sk, which is also passed as parameter.
    
      2- Set ->flowi4_scope depending on the SOCK_LOCALROUTE socket option
         instead of always initialising it with RT_SCOPE_UNIVERSE (let's
         define ip_sock_rt_scope() for this purpose).
    
      3- Avoid overloading ->flowi4_tos with RTO_ONLINK: since the scope is
         now properly initialised, we don't need to tell ip_rt_fix_tos() to
         adjust ->flowi4_scope for us. So let's define ip_sock_rt_tos(),
         which is the same as RT_CONN_FLAGS() but without the RTO_ONLINK
         bit overload.
    
    Note:
      In the original ip_route_connect() code, __ip_route_output_key()
      might clear the RTO_ONLINK bit of fl4->flowi4_tos (because of
      ip_rt_fix_tos()). Therefore flowi4_update_output() had to reuse the
      original tos variable. Now that we don't set RTO_ONLINK any more,
      this is not a problem and we can use fl4->flowi4_tos in
      flowi4_update_output().
    Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    67e1e2f4
af_inet.c 51.1 KB