Skip to content

Commit

Permalink
NFC: Forward LLCP datagrams to userspace
Browse files Browse the repository at this point in the history
With connection less PDUs we have to send the SSAP and DSAP as well.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
  • Loading branch information
Samuel Ortiz committed Oct 26, 2012
1 parent 968272b commit 31ca61a
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion net/nfc/llcp/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,11 +663,28 @@ static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
return -EFAULT;
}

if (sk->sk_type == SOCK_DGRAM && msg->msg_name) {
struct nfc_llcp_ui_cb *ui_cb = nfc_llcp_ui_skb_cb(skb);
struct sockaddr_nfc_llcp sockaddr;

pr_debug("Datagram socket %d %d\n", ui_cb->dsap, ui_cb->ssap);

sockaddr.sa_family = AF_NFC;
sockaddr.nfc_protocol = NFC_PROTO_NFC_DEP;
sockaddr.dsap = ui_cb->dsap;
sockaddr.ssap = ui_cb->ssap;

memcpy(msg->msg_name, &sockaddr, sizeof(sockaddr));
msg->msg_namelen = sizeof(sockaddr);
}

/* Mark read part of skb as used */
if (!(flags & MSG_PEEK)) {

/* SOCK_STREAM: re-queue skb if it contains unreceived data */
if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_RAW) {
if (sk->sk_type == SOCK_STREAM ||
sk->sk_type == SOCK_DGRAM ||
sk->sk_type == SOCK_RAW) {
skb_pull(skb, copied);
if (skb->len) {
skb_queue_head(&sk->sk_receive_queue, skb);
Expand Down

0 comments on commit 31ca61a

Please sign in to comment.