• Guillaume Nault's avatar
    ipv4: Set the routing scope properly in ip_route_output_ports(). · a3522a2e
    Guillaume Nault authored
    Set scope automatically in ip_route_output_ports() (using the socket
    SOCK_LOCALROUTE flag). This way, callers don't have to overload the
    tos with the RTO_ONLINK flag, like RT_CONN_FLAGS() does.
    
    For callers that don't pass a struct sock, this doesn't change anything
    as the scope is still set to RT_SCOPE_UNIVERSE when sk is NULL.
    
    Callers that passed a struct sock and used RT_CONN_FLAGS(sk) or
    RT_CONN_FLAGS_TOS(sk, tos) for the tos are modified to use
    ip_sock_tos(sk) and RT_TOS(tos) respectively, as overloading tos with
    the RTO_ONLINK flag now becomes unnecessary.
    
    In drivers/net/amt.c, all ip_route_output_ports() calls use a 0 tos
    parameter, ignoring the SOCK_LOCALROUTE flag of the socket. But the sk
    parameter is a kernel socket, which doesn't have any configuration path
    for setting SOCK_LOCALROUTE anyway. Therefore, ip_route_output_ports()
    will continue to initialise scope with RT_SCOPE_UNIVERSE and amt.c
    doesn't need to be modified.
    
    Also, remove RT_CONN_FLAGS() and RT_CONN_FLAGS_TOS() from route.h as
    these macros are now unused.
    
    The objective is to eventually remove RTO_ONLINK entirely to allow
    converting ->flowi4_tos to dscp_t. This will ensure proper isolation
    between the DSCP and ECN bits, thus minimising the risk of introducing
    bugs where TOS values interfere with ECN.
    Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/dacfd2ab40685e20959ab7b53c427595ba229e7d.1707496938.git.gnault@redhat.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    a3522a2e
ip_output.c 42.2 KB