]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
net: Facility to report route quality of connected sockets
authorTom Herbert <tom@herbertland.com>
Wed, 24 Feb 2016 18:02:52 +0000 (10:02 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Feb 2016 03:01:22 +0000 (22:01 -0500)
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>
14 files changed:
arch/alpha/include/uapi/asm/socket.h
arch/avr32/include/uapi/asm/socket.h
arch/frv/include/uapi/asm/socket.h
arch/ia64/include/uapi/asm/socket.h
arch/m32r/include/uapi/asm/socket.h
arch/mips/include/uapi/asm/socket.h
arch/mn10300/include/uapi/asm/socket.h
arch/parisc/include/uapi/asm/socket.h
arch/powerpc/include/uapi/asm/socket.h
arch/s390/include/uapi/asm/socket.h
arch/sparc/include/uapi/asm/socket.h
arch/xtensa/include/uapi/asm/socket.h
include/uapi/asm-generic/socket.h
net/core/sock.c

index c5fb9e6bc3a51df64245d31987373aa37930888c..9e46d6e656d978cd203abe4202f8b1ee353bea90 100644 (file)
@@ -95,4 +95,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _UAPI_ASM_SOCKET_H */
index 9de0796240a0015b8a315d847f8f827e389ed4e1..1fd147f09a3805d75f1e8150a825250a6e38121b 100644 (file)
@@ -88,4 +88,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _UAPI__ASM_AVR32_SOCKET_H */
index f02e4849ae838f0163848d7426b70cd3183685eb..afbc98f02d278d097d31add71104f5e4fe4040ea 100644 (file)
@@ -88,5 +88,7 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _ASM_SOCKET_H */
 
index bce29166de1bfa28d5ec86b3bcaae941ce62cb21..0018fad9039f4bd9435d2b6a5976093e56d38db7 100644 (file)
@@ -97,4 +97,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _ASM_IA64_SOCKET_H */
index 14aa4a6bccf125fc3c553dfb984e6eae3e6fd1e5..5fe42fc7b6c5dd29e15edbcfbb8ea4cb370ea25c 100644 (file)
@@ -88,4 +88,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _ASM_M32R_SOCKET_H */
index 5910fe294e932d66f94cbff106ab1d4ce470c55b..2027240aafbb8432f0cc67148b70ae57f48ed2a6 100644 (file)
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _UAPI_ASM_SOCKET_H */
index 58b1aa01ab9f140c7e910215aa727691bf7d5bcd..5129f23a9ee1008fc4b7203d2af689b0bc915a46 100644 (file)
@@ -88,4 +88,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _ASM_SOCKET_H */
index f9cf1223422ce6db81d1f144d1a2d1c709e912ab..9c935d717df94c998dce3dc66ad8eefd1b71d066 100644 (file)
@@ -87,4 +87,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       0x402C
 #define SO_ATTACH_REUSEPORT_EBPF       0x402D
 
+#define SO_CNX_ADVICE          0x402E
+
 #endif /* _UAPI_ASM_SOCKET_H */
index dd54f28ecdeca2cf82bdddb2c8e2570862d3b46e..1672e3398270bf50a740895c6ad534689eb84cf5 100644 (file)
@@ -95,4 +95,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _ASM_POWERPC_SOCKET_H */
index d02e89d14fefe45d298e564685a9de377ce7f901..41b51c2f4f1ba98055f7f75ac36915665b62392c 100644 (file)
@@ -94,4 +94,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _ASM_SOCKET_H */
index d270ee91968e50ae1e527aea02eecb832e70d2d2..31aede3af088034934c4205f2ab3bf7003956370 100644 (file)
@@ -84,6 +84,8 @@
 #define SO_ATTACH_REUSEPORT_CBPF       0x0035
 #define SO_ATTACH_REUSEPORT_EBPF       0x0036
 
+#define SO_CNX_ADVICE          0x0037
+
 /* Security levels - as per NRL IPv6 - don't actually do anything */
 #define SO_SECURITY_AUTHENTICATION             0x5001
 #define SO_SECURITY_ENCRYPTION_TRANSPORT       0x5002
index fd3b96d1153fdf04e8813f1612a4ad7903fae574..81435d995e1183d07ed0aac8903503e174a5c21e 100644 (file)
@@ -99,4 +99,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* _XTENSA_SOCKET_H */
index fb8a416683828ee23042e4bc397583f95b2cc6c9..67d632f1743ddd9ce351962fd7326f7320743efc 100644 (file)
@@ -90,4 +90,6 @@
 #define SO_ATTACH_REUSEPORT_CBPF       51
 #define SO_ATTACH_REUSEPORT_EBPF       52
 
+#define SO_CNX_ADVICE          53
+
 #endif /* __ASM_GENERIC_SOCKET_H */
index 46dc8ad7d0501d9fec698930d85798371d7932ea..4493ff820c2c0a13d5e257f26aae4284aa0b474a 100644 (file)
@@ -987,6 +987,10 @@ set_rcvbuf:
                sk->sk_incoming_cpu = val;
                break;
 
+       case SO_CNX_ADVICE:
+               if (val == 1)
+                       dst_negative_advice(sk);
+               break;
        default:
                ret = -ENOPROTOOPT;
                break;