net: SO_RCVMARK socket option for SO_MARK with recvmsg()
Adding a new socket option, SO_RCVMARK, to indicate that SO_MARK should be included in the ancillary data returned by recvmsg(). Renamed the sock_recv_ts_and_drops() function to sock_recv_cmsgs(). Signed-off-by: Erin MacNeil <lnx.erin@gmail.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: David Ahern <dsahern@kernel.org> Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> Link: https://lore.kernel.org/r/20220427200259.2564-1-lnx.erin@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
0e55546b18
commit
6fd1d51cfa
15
net/socket.c
15
net/socket.c
@@ -930,13 +930,22 @@ static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk,
|
||||
sizeof(__u32), &SOCK_SKB_CB(skb)->dropcount);
|
||||
}
|
||||
|
||||
void __sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
static void sock_recv_mark(struct msghdr *msg, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
if (sock_flag(sk, SOCK_RCVMARK) && skb)
|
||||
put_cmsg(msg, SOL_SOCKET, SO_MARK, sizeof(__u32),
|
||||
&skb->mark);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__sock_recv_ts_and_drops);
|
||||
EXPORT_SYMBOL_GPL(__sock_recv_cmsgs);
|
||||
|
||||
INDIRECT_CALLABLE_DECLARE(int inet_recvmsg(struct socket *, struct msghdr *,
|
||||
size_t, int));
|
||||
|
||||
Reference in New Issue
Block a user