diff options
| -rw-r--r-- | include/net/sock.h | 6 | ||||
| -rw-r--r-- | net/socket.c | 20 | 
2 files changed, 17 insertions, 9 deletions
| diff --git a/include/net/sock.h b/include/net/sock.h index 52fe0bc5598a..38805fa02e48 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2199,9 +2199,11 @@ static inline void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,  /**   * sock_tx_timestamp - checks whether the outgoing packet is to be time stamped   * @sk:		socket sending this packet - * @tx_flags:	filled with instructions for time stamping + * @tx_flags:	completed with instructions for time stamping + * + * Note : callers should take care of initial *tx_flags value (usually 0)   */ -void sock_tx_timestamp(struct sock *sk, __u8 *tx_flags); +void sock_tx_timestamp(const struct sock *sk, __u8 *tx_flags);  /**   * sk_eat_skb - Release a skb if it is no longer needed diff --git a/net/socket.c b/net/socket.c index ae89569a2db5..95ee7d8682e7 100644 --- a/net/socket.c +++ b/net/socket.c @@ -610,20 +610,26 @@ void sock_release(struct socket *sock)  }  EXPORT_SYMBOL(sock_release); -void sock_tx_timestamp(struct sock *sk, __u8 *tx_flags) +void sock_tx_timestamp(const struct sock *sk, __u8 *tx_flags)  { -	*tx_flags = 0; +	u8 flags = *tx_flags; +  	if (sk->sk_tsflags & SOF_TIMESTAMPING_TX_HARDWARE) -		*tx_flags |= SKBTX_HW_TSTAMP; +		flags |= SKBTX_HW_TSTAMP; +  	if (sk->sk_tsflags & SOF_TIMESTAMPING_TX_SOFTWARE) -		*tx_flags |= SKBTX_SW_TSTAMP; +		flags |= SKBTX_SW_TSTAMP; +  	if (sk->sk_tsflags & SOF_TIMESTAMPING_TX_SCHED) -		*tx_flags |= SKBTX_SCHED_TSTAMP; +		flags |= SKBTX_SCHED_TSTAMP; +  	if (sk->sk_tsflags & SOF_TIMESTAMPING_TX_ACK) -		*tx_flags |= SKBTX_ACK_TSTAMP; +		flags |= SKBTX_ACK_TSTAMP;  	if (sock_flag(sk, SOCK_WIFI_STATUS)) -		*tx_flags |= SKBTX_WIFI_STATUS; +		flags |= SKBTX_WIFI_STATUS; + +	*tx_flags = flags;  }  EXPORT_SYMBOL(sock_tx_timestamp); | 
