mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 12:00:22 +09:00
can: raw: add support for SO_TXTIME/SCM_TXTIME
[ Upstream commit 51a0d5e511 ]
This patch calls into sock_cmsg_send() to parse the user supplied
control information into a struct sockcm_cookie. Then assign the
requested transmit time to the skb.
This makes it possible to use the Earliest TXTIME First (ETF) packet
scheduler with the CAN_RAW protocol. The user can send a CAN_RAW frame
with a TXTIME and the kernel (with the ETF scheduler) will take care
of sending it to the network interface.
Link: https://lore.kernel.org/all/20220502091946.1916211-3-mkl@pengutronix.de
Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Stable-dep-of: 7f6ca95d16b9 ("net: Implement missing getsockopt(SO_TIMESTAMPING_NEW)")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ba80ff7a85
commit
464fb49ca9
@@ -780,6 +780,7 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
struct raw_sock *ro = raw_sk(sk);
|
||||
struct sockcm_cookie sockc;
|
||||
struct sk_buff *skb;
|
||||
struct net_device *dev;
|
||||
int ifindex;
|
||||
@@ -825,11 +826,19 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
|
||||
if (err < 0)
|
||||
goto free_skb;
|
||||
|
||||
skb_setup_tx_timestamp(skb, sk->sk_tsflags);
|
||||
sockcm_init(&sockc, sk);
|
||||
if (msg->msg_controllen) {
|
||||
err = sock_cmsg_send(sk, msg, &sockc);
|
||||
if (unlikely(err))
|
||||
goto free_skb;
|
||||
}
|
||||
|
||||
skb->dev = dev;
|
||||
skb->sk = sk;
|
||||
skb->priority = sk->sk_priority;
|
||||
skb->tstamp = sockc.transmit_time;
|
||||
|
||||
skb_setup_tx_timestamp(skb, sockc.tsflags);
|
||||
|
||||
err = can_send(skb, ro->loopback);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user