mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
sock: Introduce SO_RCVPRIORITY socket option
Add new socket option, SO_RCVPRIORITY, to include SO_PRIORITY in the
ancillary data returned by recvmsg().
This is analogous to the existing support for SO_RCVMARK,
as implemented in commit 6fd1d51cfa
("net: SO_RCVMARK socket option
for SO_MARK with recvmsg()").
Reviewed-by: Willem de Bruijn <willemb@google.com>
Suggested-by: Ferenc Fejes <fejes@inf.elte.hu>
Signed-off-by: Anna Emese Nyiri <annaemesenyiri@gmail.com>
Link: https://patch.msgid.link/20241213084457.45120-5-annaemesenyiri@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
cda7d5abe0
commit
e45469e594
@ -148,6 +148,8 @@
|
||||
|
||||
#define SCM_TS_OPT_ID 81
|
||||
|
||||
#define SO_RCVPRIORITY 82
|
||||
|
||||
#if !defined(__KERNEL__)
|
||||
|
||||
#if __BITS_PER_LONG == 64
|
||||
|
@ -159,6 +159,8 @@
|
||||
|
||||
#define SCM_TS_OPT_ID 81
|
||||
|
||||
#define SO_RCVPRIORITY 82
|
||||
|
||||
#if !defined(__KERNEL__)
|
||||
|
||||
#if __BITS_PER_LONG == 64
|
||||
|
@ -140,6 +140,8 @@
|
||||
|
||||
#define SCM_TS_OPT_ID 0x404C
|
||||
|
||||
#define SO_RCVPRIORITY 0x404D
|
||||
|
||||
#if !defined(__KERNEL__)
|
||||
|
||||
#if __BITS_PER_LONG == 64
|
||||
|
@ -141,6 +141,8 @@
|
||||
|
||||
#define SCM_TS_OPT_ID 0x005a
|
||||
|
||||
#define SO_RCVPRIORITY 0x005b
|
||||
|
||||
#if !defined(__KERNEL__)
|
||||
|
||||
|
||||
|
@ -953,6 +953,7 @@ enum sock_flags {
|
||||
SOCK_XDP, /* XDP is attached */
|
||||
SOCK_TSTAMP_NEW, /* Indicates 64 bit timestamps always */
|
||||
SOCK_RCVMARK, /* Receive SO_MARK ancillary data with packet */
|
||||
SOCK_RCVPRIORITY, /* Receive SO_PRIORITY ancillary data with packet */
|
||||
};
|
||||
|
||||
#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
|
||||
@ -2660,7 +2661,8 @@ static inline void sock_recv_cmsgs(struct msghdr *msg, struct sock *sk,
|
||||
{
|
||||
#define FLAGS_RECV_CMSGS ((1UL << SOCK_RXQ_OVFL) | \
|
||||
(1UL << SOCK_RCVTSTAMP) | \
|
||||
(1UL << SOCK_RCVMARK))
|
||||
(1UL << SOCK_RCVMARK) |\
|
||||
(1UL << SOCK_RCVPRIORITY))
|
||||
#define TSFLAGS_ANY (SOF_TIMESTAMPING_SOFTWARE | \
|
||||
SOF_TIMESTAMPING_RAW_HARDWARE)
|
||||
|
||||
|
@ -143,6 +143,8 @@
|
||||
|
||||
#define SCM_TS_OPT_ID 81
|
||||
|
||||
#define SO_RCVPRIORITY 82
|
||||
|
||||
#if !defined(__KERNEL__)
|
||||
|
||||
#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__))
|
||||
|
@ -1519,6 +1519,10 @@ int sk_setsockopt(struct sock *sk, int level, int optname,
|
||||
sock_valbool_flag(sk, SOCK_RCVMARK, valbool);
|
||||
break;
|
||||
|
||||
case SO_RCVPRIORITY:
|
||||
sock_valbool_flag(sk, SOCK_RCVPRIORITY, valbool);
|
||||
break;
|
||||
|
||||
case SO_RXQ_OVFL:
|
||||
sock_valbool_flag(sk, SOCK_RXQ_OVFL, valbool);
|
||||
break;
|
||||
@ -1947,6 +1951,10 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
|
||||
v.val = sock_flag(sk, SOCK_RCVMARK);
|
||||
break;
|
||||
|
||||
case SO_RCVPRIORITY:
|
||||
v.val = sock_flag(sk, SOCK_RCVPRIORITY);
|
||||
break;
|
||||
|
||||
case SO_RXQ_OVFL:
|
||||
v.val = sock_flag(sk, SOCK_RXQ_OVFL);
|
||||
break;
|
||||
|
11
net/socket.c
11
net/socket.c
@ -1008,12 +1008,23 @@ static void sock_recv_mark(struct msghdr *msg, struct sock *sk,
|
||||
}
|
||||
}
|
||||
|
||||
static void sock_recv_priority(struct msghdr *msg, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
if (sock_flag(sk, SOCK_RCVPRIORITY) && skb) {
|
||||
__u32 priority = skb->priority;
|
||||
|
||||
put_cmsg(msg, SOL_SOCKET, SO_PRIORITY, sizeof(__u32), &priority);
|
||||
}
|
||||
}
|
||||
|
||||
void __sock_recv_cmsgs(struct msghdr *msg, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
sock_recv_timestamp(msg, sk, skb);
|
||||
sock_recv_drops(msg, sk, skb);
|
||||
sock_recv_mark(msg, sk, skb);
|
||||
sock_recv_priority(msg, sk, skb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__sock_recv_cmsgs);
|
||||
|
||||
|
@ -126,6 +126,8 @@
|
||||
|
||||
#define SCM_TS_OPT_ID 78
|
||||
|
||||
#define SO_RCVPRIORITY 79
|
||||
|
||||
#if !defined(__KERNEL__)
|
||||
|
||||
#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__))
|
||||
|
Loading…
Reference in New Issue
Block a user