Message ID | 6ca7a70859803ff272cc965409856de354fa4e6c.1684764727.git.gnault@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Commit | c85be08fc4fa44f07167be0377ebaa8d36b1dd58 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ipv4: Remove RTO_ONLINK from udp, ping and raw sockets. | expand |
On 5/22/23 8:38 AM, Guillaume Nault wrote: > Use ip_sendmsg_scope() to properly initialise the scope in > flowi4_init_output(), instead of overriding tos with the RTO_ONLINK > flag. The objective is to eventually remove RTO_ONLINK, which will > allow converting .flowi4_tos to dscp_t. > > The MSG_DONTROUTE and SOCK_LOCALROUTE cases were already handled by > raw_sendmsg() (SOCK_LOCALROUTE was handled by the RT_CONN_FLAGS*() > macros called by get_rtconn_flags()). However, opt.is_strictroute > wasn't taken into account. Therefore, a side effect of this patch is to > now honour opt.is_strictroute, and thus align raw_sendmsg() with > ping_v4_sendmsg() and udp_sendmsg(). > > Since raw_sendmsg() was the only user of get_rtconn_flags(), we can now > remove this function. > > Signed-off-by: Guillaume Nault <gnault@redhat.com> > --- > include/net/ip.h | 5 ----- > net/ipv4/raw.c | 10 ++++------ > 2 files changed, 4 insertions(+), 11 deletions(-) > Reviewed-by: David Ahern <dsahern@kernel.org>
diff --git a/include/net/ip.h b/include/net/ip.h index 6e262efa0d55..fab910be252c 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -260,11 +260,6 @@ static inline __u8 get_rttos(struct ipcm_cookie* ipc, struct inet_sock *inet) return (ipc->tos != -1) ? RT_TOS(ipc->tos) : RT_TOS(inet->tos); } -static inline __u8 get_rtconn_flags(struct ipcm_cookie* ipc, struct sock* sk) -{ - return (ipc->tos != -1) ? RT_CONN_FLAGS_TOS(sk, ipc->tos) : RT_CONN_FLAGS(sk); -} - /* datagram.c */ int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index ff712bf2a98d..8b7b5c842bdd 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -476,10 +476,10 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) struct ipcm_cookie ipc; struct rtable *rt = NULL; struct flowi4 fl4; + u8 tos, scope; int free = 0; __be32 daddr; __be32 saddr; - u8 tos; int err; struct ip_options_data opt_copy; struct raw_frag_vec rfv; @@ -572,9 +572,8 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) daddr = ipc.opt->opt.faddr; } } - tos = get_rtconn_flags(&ipc, sk); - if (msg->msg_flags & MSG_DONTROUTE) - tos |= RTO_ONLINK; + tos = get_rttos(&ipc, inet); + scope = ip_sendmsg_scope(inet, &ipc, msg); if (ipv4_is_multicast(daddr)) { if (!ipc.oif || netif_index_is_l3_master(sock_net(sk), ipc.oif)) @@ -597,8 +596,7 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) } } - flowi4_init_output(&fl4, ipc.oif, ipc.sockc.mark, tos, - RT_SCOPE_UNIVERSE, + flowi4_init_output(&fl4, ipc.oif, ipc.sockc.mark, tos, scope, hdrincl ? IPPROTO_RAW : sk->sk_protocol, inet_sk_flowi_flags(sk) | (hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),
Use ip_sendmsg_scope() to properly initialise the scope in flowi4_init_output(), instead of overriding tos with the RTO_ONLINK flag. The objective is to eventually remove RTO_ONLINK, which will allow converting .flowi4_tos to dscp_t. The MSG_DONTROUTE and SOCK_LOCALROUTE cases were already handled by raw_sendmsg() (SOCK_LOCALROUTE was handled by the RT_CONN_FLAGS*() macros called by get_rtconn_flags()). However, opt.is_strictroute wasn't taken into account. Therefore, a side effect of this patch is to now honour opt.is_strictroute, and thus align raw_sendmsg() with ping_v4_sendmsg() and udp_sendmsg(). Since raw_sendmsg() was the only user of get_rtconn_flags(), we can now remove this function. Signed-off-by: Guillaume Nault <gnault@redhat.com> --- include/net/ip.h | 5 ----- net/ipv4/raw.c | 10 ++++------ 2 files changed, 4 insertions(+), 11 deletions(-)