diff options
author | Hiren Tandel <hirent@marvell.com> | 2014-05-05 06:43:31 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2014-05-19 18:06:04 -0400 |
commit | 57be1f3f3ec1ccab6432615ca161c4c9ece2a2aa (patch) | |
tree | bb0021acf67dcb66957f0482cb89f894d8fa77f0 /net/nfc/llcp_core.c | |
parent | c79d9f9ef86683824c195b093106222ff0611c10 (diff) |
NFC: Add RAW socket type support for SOCKPROTO_RAW
This allows for a more generic NFC sniffing by using SOCKPROTO_RAW
SOCK_RAW to read RAW NFC frames. This is for sniffing anything but LLCP
(HCI, NCI, etc...).
Signed-off-by: Hiren Tandel <hirent@marvell.com>
Signed-off-by: Rahul Tank <rahult@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc/llcp_core.c')
-rw-r--r-- | net/nfc/llcp_core.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/nfc/llcp_core.c b/net/nfc/llcp_core.c index b4671958fcf9..f6278da68763 100644 --- a/net/nfc/llcp_core.c +++ b/net/nfc/llcp_core.c | |||
@@ -680,16 +680,17 @@ void nfc_llcp_send_to_raw_sock(struct nfc_llcp_local *local, | |||
680 | continue; | 680 | continue; |
681 | 681 | ||
682 | if (skb_copy == NULL) { | 682 | if (skb_copy == NULL) { |
683 | skb_copy = __pskb_copy(skb, NFC_LLCP_RAW_HEADER_SIZE, | 683 | skb_copy = __pskb_copy(skb, NFC_RAW_HEADER_SIZE, |
684 | GFP_ATOMIC); | 684 | GFP_ATOMIC); |
685 | 685 | ||
686 | if (skb_copy == NULL) | 686 | if (skb_copy == NULL) |
687 | continue; | 687 | continue; |
688 | 688 | ||
689 | data = skb_push(skb_copy, NFC_LLCP_RAW_HEADER_SIZE); | 689 | data = skb_push(skb_copy, NFC_RAW_HEADER_SIZE); |
690 | 690 | ||
691 | data[0] = local->dev ? local->dev->idx : 0xFF; | 691 | data[0] = local->dev ? local->dev->idx : 0xFF; |
692 | data[1] = direction; | 692 | data[1] = direction & 0x01; |
693 | data[1] |= (RAW_PAYLOAD_LLCP << 1); | ||
693 | } | 694 | } |
694 | 695 | ||
695 | nskb = skb_clone(skb_copy, GFP_ATOMIC); | 696 | nskb = skb_clone(skb_copy, GFP_ATOMIC); |
@@ -747,7 +748,7 @@ static void nfc_llcp_tx_work(struct work_struct *work) | |||
747 | __net_timestamp(skb); | 748 | __net_timestamp(skb); |
748 | 749 | ||
749 | nfc_llcp_send_to_raw_sock(local, skb, | 750 | nfc_llcp_send_to_raw_sock(local, skb, |
750 | NFC_LLCP_DIRECTION_TX); | 751 | NFC_DIRECTION_TX); |
751 | 752 | ||
752 | ret = nfc_data_exchange(local->dev, local->target_idx, | 753 | ret = nfc_data_exchange(local->dev, local->target_idx, |
753 | skb, nfc_llcp_recv, local); | 754 | skb, nfc_llcp_recv, local); |
@@ -1476,7 +1477,7 @@ static void nfc_llcp_rx_work(struct work_struct *work) | |||
1476 | 1477 | ||
1477 | __net_timestamp(skb); | 1478 | __net_timestamp(skb); |
1478 | 1479 | ||
1479 | nfc_llcp_send_to_raw_sock(local, skb, NFC_LLCP_DIRECTION_RX); | 1480 | nfc_llcp_send_to_raw_sock(local, skb, NFC_DIRECTION_RX); |
1480 | 1481 | ||
1481 | nfc_llcp_rx_skb(local, skb); | 1482 | nfc_llcp_rx_skb(local, skb); |
1482 | 1483 | ||