Skip to content

Commit a87cb3e

Browse files
tomratbertdavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f1705ec commit a87cb3e

File tree

14 files changed

+30
-0
lines changed

14 files changed

+30
-0
lines changed

arch/alpha/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,6 @@
9595
#define SO_ATTACH_REUSEPORT_CBPF 51
9696
#define SO_ATTACH_REUSEPORT_EBPF 52
9797

98+
#define SO_CNX_ADVICE 53
99+
98100
#endif /* _UAPI_ASM_SOCKET_H */

arch/avr32/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,6 @@
8888
#define SO_ATTACH_REUSEPORT_CBPF 51
8989
#define SO_ATTACH_REUSEPORT_EBPF 52
9090

91+
#define SO_CNX_ADVICE 53
92+
9193
#endif /* _UAPI__ASM_AVR32_SOCKET_H */

arch/frv/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,7 @@
8888
#define SO_ATTACH_REUSEPORT_CBPF 51
8989
#define SO_ATTACH_REUSEPORT_EBPF 52
9090

91+
#define SO_CNX_ADVICE 53
92+
9193
#endif /* _ASM_SOCKET_H */
9294

arch/ia64/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,6 @@
9797
#define SO_ATTACH_REUSEPORT_CBPF 51
9898
#define SO_ATTACH_REUSEPORT_EBPF 52
9999

100+
#define SO_CNX_ADVICE 53
101+
100102
#endif /* _ASM_IA64_SOCKET_H */

arch/m32r/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,6 @@
8888
#define SO_ATTACH_REUSEPORT_CBPF 51
8989
#define SO_ATTACH_REUSEPORT_EBPF 52
9090

91+
#define SO_CNX_ADVICE 53
92+
9193
#endif /* _ASM_M32R_SOCKET_H */

arch/mips/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,6 @@
106106
#define SO_ATTACH_REUSEPORT_CBPF 51
107107
#define SO_ATTACH_REUSEPORT_EBPF 52
108108

109+
#define SO_CNX_ADVICE 53
110+
109111
#endif /* _UAPI_ASM_SOCKET_H */

arch/mn10300/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,6 @@
8888
#define SO_ATTACH_REUSEPORT_CBPF 51
8989
#define SO_ATTACH_REUSEPORT_EBPF 52
9090

91+
#define SO_CNX_ADVICE 53
92+
9193
#endif /* _ASM_SOCKET_H */

arch/parisc/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,6 @@
8787
#define SO_ATTACH_REUSEPORT_CBPF 0x402C
8888
#define SO_ATTACH_REUSEPORT_EBPF 0x402D
8989

90+
#define SO_CNX_ADVICE 0x402E
91+
9092
#endif /* _UAPI_ASM_SOCKET_H */

arch/powerpc/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,6 @@
9595
#define SO_ATTACH_REUSEPORT_CBPF 51
9696
#define SO_ATTACH_REUSEPORT_EBPF 52
9797

98+
#define SO_CNX_ADVICE 53
99+
98100
#endif /* _ASM_POWERPC_SOCKET_H */

arch/s390/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,6 @@
9494
#define SO_ATTACH_REUSEPORT_CBPF 51
9595
#define SO_ATTACH_REUSEPORT_EBPF 52
9696

97+
#define SO_CNX_ADVICE 53
98+
9799
#endif /* _ASM_SOCKET_H */

arch/sparc/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@
8484
#define SO_ATTACH_REUSEPORT_CBPF 0x0035
8585
#define SO_ATTACH_REUSEPORT_EBPF 0x0036
8686

87+
#define SO_CNX_ADVICE 0x0037
88+
8789
/* Security levels - as per NRL IPv6 - don't actually do anything */
8890
#define SO_SECURITY_AUTHENTICATION 0x5001
8991
#define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002

arch/xtensa/include/uapi/asm/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,6 @@
9999
#define SO_ATTACH_REUSEPORT_CBPF 51
100100
#define SO_ATTACH_REUSEPORT_EBPF 52
101101

102+
#define SO_CNX_ADVICE 53
103+
102104
#endif /* _XTENSA_SOCKET_H */

include/uapi/asm-generic/socket.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,6 @@
9090
#define SO_ATTACH_REUSEPORT_CBPF 51
9191
#define SO_ATTACH_REUSEPORT_EBPF 52
9292

93+
#define SO_CNX_ADVICE 53
94+
9395
#endif /* __ASM_GENERIC_SOCKET_H */

net/core/sock.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,10 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
987987
sk->sk_incoming_cpu = val;
988988
break;
989989

990+
case SO_CNX_ADVICE:
991+
if (val == 1)
992+
dst_negative_advice(sk);
993+
break;
990994
default:
991995
ret = -ENOPROTOOPT;
992996
break;

0 commit comments

Comments
 (0)