This socket option returns the NAPI ID associated with the queue on which the last frame is received. This information can be used by the apps to split the incoming flows among the threads based on the Rx queue on which they are received. If the NAPI ID actually represents a sender_cpu then the value is ignored and 0 is returned.
Unified · Split
| @@ -101,4 +101,6 @@ · 100 unmodified lines | ||
| 101 | 101 | |
| 102 | 102 | #define SO_MEMINFO 55 |
| 103 | 103 | |
| 104 | +#define SO_INCOMING_NAPI_ID 56 | |
| 105 | + | |
| 104 | 106 | #endif /* _UAPI_ASM_SOCKET_H */ |
| @@ -94,4 +94,6 @@ · 93 unmodified lines | ||
| 94 | 94 | |
| 95 | 95 | #define SO_MEMINFO 55 |
| 96 | 96 | |
| 97 | +#define SO_INCOMING_NAPI_ID 56 | |
| 98 | + | |
| 97 | 99 | #endif /* _UAPI__ASM_AVR32_SOCKET_H */ |
| @@ -94,5 +94,7 @@ · 93 unmodified lines | ||
| 94 | 94 | |
| 95 | 95 | #define SO_MEMINFO 55 |
| 96 | 96 | |
| 97 | +#define SO_INCOMING_NAPI_ID 56 | |
| 98 | + | |
| 97 | 99 | #endif /* _ASM_SOCKET_H */ |
| 98 | 100 | |
| @@ -103,4 +103,6 @@ · 102 unmodified lines | ||
| 103 | 103 | |
| 104 | 104 | #define SO_MEMINFO 55 |
| 105 | 105 | |
| 106 | +#define SO_INCOMING_NAPI_ID 56 | |
| 107 | + | |
| 106 | 108 | #endif /* _ASM_IA64_SOCKET_H */ |
| @@ -94,4 +94,6 @@ · 93 unmodified lines | ||
| 94 | 94 | |
| 95 | 95 | #define SO_MEMINFO 55 |
| 96 | 96 | |
| 97 | +#define SO_INCOMING_NAPI_ID 56 | |
| 98 | + | |
| 97 | 99 | #endif /* _ASM_M32R_SOCKET_H */ |
| @@ -112,5 +112,6 @@ · 111 unmodified lines | ||
| 112 | 112 | |
| 113 | 113 | #define SO_MEMINFO 55 |
| 114 | 114 | |
| 115 | +#define SO_INCOMING_NAPI_ID 56 | |
| 115 | 116 | |
| 116 | 117 | #endif /* _UAPI_ASM_SOCKET_H */ |
| @@ -94,4 +94,6 @@ · 93 unmodified lines | ||
| 94 | 94 | |
| 95 | 95 | #define SO_MEMINFO 55 |
| 96 | 96 | |
| 97 | +#define SO_INCOMING_NAPI_ID 56 | |
| 98 | + | |
| 97 | 99 | #endif /* _ASM_SOCKET_H */ |
| @@ -93,4 +93,6 @@ · 92 unmodified lines | ||
| 93 | 93 | |
| 94 | 94 | #define SO_MEMINFO 0x4030 |
| 95 | 95 | |
| 96 | +#define SO_INCOMING_NAPI_ID 0x4031 | |
| 97 | + | |
| 96 | 98 | #endif /* _UAPI_ASM_SOCKET_H */ |
| @@ -101,4 +101,6 @@ · 100 unmodified lines | ||
| 101 | 101 | |
| 102 | 102 | #define SO_MEMINFO 55 |
| 103 | 103 | |
| 104 | +#define SO_INCOMING_NAPI_ID 56 | |
| 105 | + | |
| 104 | 106 | #endif /* _ASM_POWERPC_SOCKET_H */ |
| @@ -100,4 +100,6 @@ · 99 unmodified lines | ||
| 100 | 100 | |
| 101 | 101 | #define SO_MEMINFO 55 |
| 102 | 102 | |
| 103 | +#define SO_INCOMING_NAPI_ID 56 | |
| 104 | + | |
| 103 | 105 | #endif /* _ASM_SOCKET_H */ |
| @@ -90,6 +90,8 @@ · 89 unmodified lines | ||
| 90 | 90 | |
| 91 | 91 | #define SO_MEMINFO 0x0039 |
| 92 | 92 | |
| 93 | +#define SO_INCOMING_NAPI_ID 0x003a | |
| 94 | + | |
| 93 | 95 | /* Security levels - as per NRL IPv6 - don't actually do anything */ |
| 94 | 96 | #define SO_SECURITY_AUTHENTICATION 0x5001 |
| 95 | 97 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 |
| @@ -105,4 +105,6 @@ · 104 unmodified lines | ||
| 105 | 105 | |
| 106 | 106 | #define SO_MEMINFO 55 |
| 107 | 107 | |
| 108 | +#define SO_INCOMING_NAPI_ID 56 | |
| 109 | + | |
| 108 | 110 | #endif /* _XTENSA_SOCKET_H */ |
| @@ -96,4 +96,6 @@ · 95 unmodified lines | ||
| 96 | 96 | |
| 97 | 97 | #define SO_MEMINFO 55 |
| 98 | 98 | |
| 99 | +#define SO_INCOMING_NAPI_ID 56 | |
| 100 | + | |
| 99 | 101 | #endif /* __ASM_GENERIC_SOCKET_H */ |
| @@ -1328,6 +1328,18 @@ int sock_getsockopt(struct socket *sock, int level, int optname, · 1327 unmodified lines | ||
| 1328 | 1328 | |
| 1329 | 1329 | goto lenout; |
| 1330 | 1330 | } |
| 1331 | + | |
| 1332 | +#ifdef CONFIG_NET_RX_BUSY_POLL | |
| 1333 | + case SO_INCOMING_NAPI_ID: | |
| 1334 | + v.val = READ_ONCE(sk->sk_napi_id); | |
| 1335 | + | |
| 1336 | + /* aggregate non-NAPI IDs down to 0 */ | |
| 1337 | + if (v.val < MIN_NAPI_ID) | |
| 1338 | + v.val = 0; | |
| 1339 | + | |
| 1340 | + break; | |
| 1341 | +#endif | |
| 1342 | + | |
| 1331 | 1343 | default: |
| 1332 | 1344 | /* We implement the SO_SNDLOWAT etc to not be settable |
| 1333 | 1345 | * (1003.1g 7). |