NFC: NCI: Send all NCI frames to raw sockets
authorHiren Tandel <hirent@marvell.com>
Mon, 5 May 2014 10:52:27 +0000 (19:52 +0900)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 19 May 2014 22:23:59 +0000 (00:23 +0200)
So that anyone listening on SOCKPROTO_RAW for raw frames will get all
NCI frames, in both directions. This actually implements userspace NFC
NCI sniffing.
It's now up to userspace to decode those frames.

Signed-off-by: Hiren Tandel <hirent@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
net/nfc/nci/core.c

index 6c34ac978501705a0c743289b34b2f62750bc441..2b400e1a869522b9ecbca787a0ff2938f6109c26 100644 (file)
@@ -861,6 +861,10 @@ static int nci_send_frame(struct nci_dev *ndev, struct sk_buff *skb)
        /* Get rid of skb owner, prior to sending to the driver. */
        skb_orphan(skb);
 
+       /* Send copy to sniffer */
+       nfc_send_to_raw_sock(ndev->nfc_dev, skb,
+                            RAW_PAYLOAD_NCI, NFC_DIRECTION_TX);
+
        return ndev->ops->send(ndev, skb);
 }
 
@@ -935,6 +939,11 @@ static void nci_rx_work(struct work_struct *work)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&ndev->rx_q))) {
+
+               /* Send copy to sniffer */
+               nfc_send_to_raw_sock(ndev->nfc_dev, skb,
+                                    RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
+
                /* Process frame */
                switch (nci_mt(skb->data)) {
                case NCI_MT_RSP_PKT: