forked from mirrors/linux
		
	raw: Stop using RTO_ONLINK.
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> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									726de790f6
								
							
						
					
					
						commit
						c85be08fc4
					
				
					 2 changed files with 4 additions and 11 deletions
				
			
		|  | @ -258,11 +258,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); | 	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 */ | /* 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); | ||||||
| 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); | ||||||
|  |  | ||||||
|  | @ -476,10 +476,10 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | ||||||
| 	struct ipcm_cookie ipc; | 	struct ipcm_cookie ipc; | ||||||
| 	struct rtable *rt = NULL; | 	struct rtable *rt = NULL; | ||||||
| 	struct flowi4 fl4; | 	struct flowi4 fl4; | ||||||
|  | 	u8 tos, scope; | ||||||
| 	int free = 0; | 	int free = 0; | ||||||
| 	__be32 daddr; | 	__be32 daddr; | ||||||
| 	__be32 saddr; | 	__be32 saddr; | ||||||
| 	u8  tos; |  | ||||||
| 	int err; | 	int err; | ||||||
| 	struct ip_options_data opt_copy; | 	struct ip_options_data opt_copy; | ||||||
| 	struct raw_frag_vec rfv; | 	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; | 			daddr = ipc.opt->opt.faddr; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	tos = get_rtconn_flags(&ipc, sk); | 	tos = get_rttos(&ipc, inet); | ||||||
| 	if (msg->msg_flags & MSG_DONTROUTE) | 	scope = ip_sendmsg_scope(inet, &ipc, msg); | ||||||
| 		tos |= RTO_ONLINK; |  | ||||||
| 
 | 
 | ||||||
| 	if (ipv4_is_multicast(daddr)) { | 	if (ipv4_is_multicast(daddr)) { | ||||||
| 		if (!ipc.oif || netif_index_is_l3_master(sock_net(sk), ipc.oif)) | 		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, | 	flowi4_init_output(&fl4, ipc.oif, ipc.sockc.mark, tos, scope, | ||||||
| 			   RT_SCOPE_UNIVERSE, |  | ||||||
| 			   hdrincl ? IPPROTO_RAW : sk->sk_protocol, | 			   hdrincl ? IPPROTO_RAW : sk->sk_protocol, | ||||||
| 			   inet_sk_flowi_flags(sk) | | 			   inet_sk_flowi_flags(sk) | | ||||||
| 			    (hdrincl ? FLOWI_FLAG_KNOWN_NH : 0), | 			    (hdrincl ? FLOWI_FLAG_KNOWN_NH : 0), | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Guillaume Nault
						Guillaume Nault