Skip to content

Commit

Permalink
can: raw: add support for SO_TXTIME/SCM_TXTIME
Browse files Browse the repository at this point in the history
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/[email protected]
Acked-by: Oliver Hartkopp <[email protected]>
Signed-off-by: Marc Kleine-Budde <[email protected]>
  • Loading branch information
marckleinebudde committed May 16, 2022
1 parent 2af8493 commit 51a0d5e
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion net/can/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -772,6 +772,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;
Expand Down Expand Up @@ -817,10 +818,18 @@ 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->priority = sk->sk_priority;
skb->tstamp = sockc.transmit_time;

skb_setup_tx_timestamp(skb, sockc.tsflags);

err = can_send(skb, ro->loopback);

Expand Down

0 comments on commit 51a0d5e

Please sign in to comment.