forked from mirrors/linux
		
	net: Facility to report route quality of connected sockets
This patch add the SO_CNX_ADVICE socket option (setsockopt only). The purpose is to allow an application to give feedback to the kernel about the quality of the network path for a connected socket. The value argument indicates the type of quality report. For this initial patch the only supported advice is a value of 1 which indicates "bad path, please reroute"-- the action taken by the kernel is to call dst_negative_advice which will attempt to choose a different ECMP route, reset the TX hash for flow label and UDP source port in encapsulation, etc. This facility should be useful for connected UDP sockets where only the application can provide any feedback about path quality. It could also be useful for TCP applications that have additional knowledge about the path outside of the normal TCP control loop. Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									f1705ec197
								
							
						
					
					
						commit
						a87cb3e48e
					
				
					 14 changed files with 30 additions and 0 deletions
				
			
		|  | @ -95,4 +95,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _UAPI_ASM_SOCKET_H */ | #endif /* _UAPI_ASM_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -88,4 +88,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _UAPI__ASM_AVR32_SOCKET_H */ | #endif /* _UAPI__ASM_AVR32_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -88,5 +88,7 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _ASM_SOCKET_H */ | #endif /* _ASM_SOCKET_H */ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -97,4 +97,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _ASM_IA64_SOCKET_H */ | #endif /* _ASM_IA64_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -88,4 +88,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _ASM_M32R_SOCKET_H */ | #endif /* _ASM_M32R_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -106,4 +106,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _UAPI_ASM_SOCKET_H */ | #endif /* _UAPI_ASM_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -88,4 +88,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _ASM_SOCKET_H */ | #endif /* _ASM_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -87,4 +87,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	0x402C | #define SO_ATTACH_REUSEPORT_CBPF	0x402C | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	0x402D | #define SO_ATTACH_REUSEPORT_EBPF	0x402D | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		0x402E | ||||||
|  | 
 | ||||||
| #endif /* _UAPI_ASM_SOCKET_H */ | #endif /* _UAPI_ASM_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -95,4 +95,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif	/* _ASM_POWERPC_SOCKET_H */ | #endif	/* _ASM_POWERPC_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -94,4 +94,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* _ASM_SOCKET_H */ | #endif /* _ASM_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -84,6 +84,8 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	0x0035 | #define SO_ATTACH_REUSEPORT_CBPF	0x0035 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	0x0036 | #define SO_ATTACH_REUSEPORT_EBPF	0x0036 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		0x0037 | ||||||
|  | 
 | ||||||
| /* Security levels - as per NRL IPv6 - don't actually do anything */ | /* Security levels - as per NRL IPv6 - don't actually do anything */ | ||||||
| #define SO_SECURITY_AUTHENTICATION		0x5001 | #define SO_SECURITY_AUTHENTICATION		0x5001 | ||||||
| #define SO_SECURITY_ENCRYPTION_TRANSPORT	0x5002 | #define SO_SECURITY_ENCRYPTION_TRANSPORT	0x5002 | ||||||
|  |  | ||||||
|  | @ -99,4 +99,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif	/* _XTENSA_SOCKET_H */ | #endif	/* _XTENSA_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -90,4 +90,6 @@ | ||||||
| #define SO_ATTACH_REUSEPORT_CBPF	51 | #define SO_ATTACH_REUSEPORT_CBPF	51 | ||||||
| #define SO_ATTACH_REUSEPORT_EBPF	52 | #define SO_ATTACH_REUSEPORT_EBPF	52 | ||||||
| 
 | 
 | ||||||
|  | #define SO_CNX_ADVICE		53 | ||||||
|  | 
 | ||||||
| #endif /* __ASM_GENERIC_SOCKET_H */ | #endif /* __ASM_GENERIC_SOCKET_H */ | ||||||
|  |  | ||||||
|  | @ -987,6 +987,10 @@ int sock_setsockopt(struct socket *sock, int level, int optname, | ||||||
| 		sk->sk_incoming_cpu = val; | 		sk->sk_incoming_cpu = val; | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
|  | 	case SO_CNX_ADVICE: | ||||||
|  | 		if (val == 1) | ||||||
|  | 			dst_negative_advice(sk); | ||||||
|  | 		break; | ||||||
| 	default: | 	default: | ||||||
| 		ret = -ENOPROTOOPT; | 		ret = -ENOPROTOOPT; | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Tom Herbert
						Tom Herbert