[Bluetooth] Add timestamp support to L2CAP, RFCOMM and SCO
Enable the common timestamp functionality that the network subsystem provides for L2CAP, RFCOMM and SCO sockets. It is possible to either use SO_TIMESTAMP or the IOCTLs to retrieve the timestamp of the current packet. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/poll.h>
|
||||
#include <net/sock.h>
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
#if defined(CONFIG_KMOD)
|
||||
#include <linux/kmod.h>
|
||||
@@ -266,6 +267,8 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
skb_reset_transport_header(skb);
|
||||
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
|
||||
if (err == 0)
|
||||
sock_recv_timestamp(msg, sk, skb);
|
||||
|
||||
skb_free_datagram(sk, skb);
|
||||
|
||||
@@ -329,6 +332,31 @@ unsigned int bt_sock_poll(struct file * file, struct socket *sock, poll_table *w
|
||||
}
|
||||
EXPORT_SYMBOL(bt_sock_poll);
|
||||
|
||||
int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
int err;
|
||||
|
||||
BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCGSTAMP:
|
||||
err = sock_get_timestamp(sk, (struct timeval __user *) arg);
|
||||
break;
|
||||
|
||||
case SIOCGSTAMPNS:
|
||||
err = sock_get_timestampns(sk, (struct timespec __user *) arg);
|
||||
break;
|
||||
|
||||
default:
|
||||
err = -ENOIOCTLCMD;
|
||||
break;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(bt_sock_ioctl);
|
||||
|
||||
int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
|
||||
{
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
|
Reference in New Issue
Block a user