NFC: llcp: Add support in getsockopt for RW, LTO, and MIU remote parameters
authorThierry Escande <thierry.escande@linux.intel.com>
Tue, 2 Apr 2013 08:25:16 +0000 (10:25 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 11 Apr 2013 14:28:59 +0000 (16:28 +0200)
Useful for LLCP validation tests.

Signed-off-by: Thierry Escande <thierry.escande@linux.intel.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
include/uapi/linux/nfc.h
net/nfc/llcp/sock.c

index 7440bc8..7c6f627 100644 (file)
@@ -233,7 +233,10 @@ struct sockaddr_nfc_llcp {
 #define NFC_LLCP_DIRECTION_TX          0x01
 
 /* socket option names */
-#define NFC_LLCP_RW   0
-#define NFC_LLCP_MIUX 1
+#define NFC_LLCP_RW            0
+#define NFC_LLCP_MIUX          1
+#define NFC_LLCP_REMOTE_MIU    2
+#define NFC_LLCP_REMOTE_LTO    3
+#define NFC_LLCP_REMOTE_RW     4
 
 #endif /*__LINUX_NFC_H */
index 641c535..fd01ac6 100644 (file)
@@ -303,7 +303,7 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname,
        struct sock *sk = sock->sk;
        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
        int len, err = 0;
-       u16 miux;
+       u16 miux, remote_miu;
        u8 rw;
 
        pr_debug("%p optname %d\n", sk, optname);
@@ -339,6 +339,27 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname,
 
                break;
 
+       case NFC_LLCP_REMOTE_MIU:
+               remote_miu = llcp_sock->remote_miu > LLCP_MAX_MIU ?
+                               local->remote_miu : llcp_sock->remote_miu;
+
+               if (put_user(remote_miu, (u32 __user *) optval))
+                       err = -EFAULT;
+
+               break;
+
+       case NFC_LLCP_REMOTE_LTO:
+               if (put_user(local->remote_lto / 10, (u32 __user *) optval))
+                       err = -EFAULT;
+
+               break;
+
+       case NFC_LLCP_REMOTE_RW:
+               if (put_user(llcp_sock->remote_rw, (u32 __user *) optval))
+                       err = -EFAULT;
+
+               break;
+
        default:
                err = -ENOPROTOOPT;
                break;