diff options
-rw-r--r-- | net/nfc/llcp/commands.c | 24 | ||||
-rw-r--r-- | net/nfc/llcp/llcp.c | 2 | ||||
-rw-r--r-- | net/nfc/llcp/sock.c | 5 |
3 files changed, 23 insertions, 8 deletions
diff --git a/net/nfc/llcp/commands.c b/net/nfc/llcp/commands.c index c8a209665792..5f61830a0e86 100644 --- a/net/nfc/llcp/commands.c +++ b/net/nfc/llcp/commands.c | |||
@@ -319,9 +319,9 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock) | |||
319 | struct sk_buff *skb; | 319 | struct sk_buff *skb; |
320 | u8 *service_name_tlv = NULL, service_name_tlv_length; | 320 | u8 *service_name_tlv = NULL, service_name_tlv_length; |
321 | u8 *miux_tlv = NULL, miux_tlv_length; | 321 | u8 *miux_tlv = NULL, miux_tlv_length; |
322 | u8 *rw_tlv = NULL, rw_tlv_length; | 322 | u8 *rw_tlv = NULL, rw_tlv_length, rw; |
323 | int err; | 323 | int err; |
324 | u16 size = 0; | 324 | u16 size = 0, miux; |
325 | 325 | ||
326 | pr_debug("Sending CONNECT\n"); | 326 | pr_debug("Sending CONNECT\n"); |
327 | 327 | ||
@@ -337,11 +337,15 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock) | |||
337 | size += service_name_tlv_length; | 337 | size += service_name_tlv_length; |
338 | } | 338 | } |
339 | 339 | ||
340 | miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&local->miux, 0, | 340 | /* If the socket parameters are not set, use the local ones */ |
341 | miux = sock->miux > LLCP_MAX_MIUX ? local->miux : sock->miux; | ||
342 | rw = sock->rw > LLCP_MAX_RW ? local->rw : sock->rw; | ||
343 | |||
344 | miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&miux, 0, | ||
341 | &miux_tlv_length); | 345 | &miux_tlv_length); |
342 | size += miux_tlv_length; | 346 | size += miux_tlv_length; |
343 | 347 | ||
344 | rw_tlv = nfc_llcp_build_tlv(LLCP_TLV_RW, &local->rw, 0, &rw_tlv_length); | 348 | rw_tlv = nfc_llcp_build_tlv(LLCP_TLV_RW, &rw, 0, &rw_tlv_length); |
345 | size += rw_tlv_length; | 349 | size += rw_tlv_length; |
346 | 350 | ||
347 | pr_debug("SKB size %d SN length %zu\n", size, sock->service_name_len); | 351 | pr_debug("SKB size %d SN length %zu\n", size, sock->service_name_len); |
@@ -378,9 +382,9 @@ int nfc_llcp_send_cc(struct nfc_llcp_sock *sock) | |||
378 | struct nfc_llcp_local *local; | 382 | struct nfc_llcp_local *local; |
379 | struct sk_buff *skb; | 383 | struct sk_buff *skb; |
380 | u8 *miux_tlv = NULL, miux_tlv_length; | 384 | u8 *miux_tlv = NULL, miux_tlv_length; |
381 | u8 *rw_tlv = NULL, rw_tlv_length; | 385 | u8 *rw_tlv = NULL, rw_tlv_length, rw; |
382 | int err; | 386 | int err; |
383 | u16 size = 0; | 387 | u16 size = 0, miux; |
384 | 388 | ||
385 | pr_debug("Sending CC\n"); | 389 | pr_debug("Sending CC\n"); |
386 | 390 | ||
@@ -388,11 +392,15 @@ int nfc_llcp_send_cc(struct nfc_llcp_sock *sock) | |||
388 | if (local == NULL) | 392 | if (local == NULL) |
389 | return -ENODEV; | 393 | return -ENODEV; |
390 | 394 | ||
391 | miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&local->miux, 0, | 395 | /* If the socket parameters are not set, use the local ones */ |
396 | miux = sock->miux > LLCP_MAX_MIUX ? local->miux : sock->miux; | ||
397 | rw = sock->rw > LLCP_MAX_RW ? local->rw : sock->rw; | ||
398 | |||
399 | miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&miux, 0, | ||
392 | &miux_tlv_length); | 400 | &miux_tlv_length); |
393 | size += miux_tlv_length; | 401 | size += miux_tlv_length; |
394 | 402 | ||
395 | rw_tlv = nfc_llcp_build_tlv(LLCP_TLV_RW, &local->rw, 0, &rw_tlv_length); | 403 | rw_tlv = nfc_llcp_build_tlv(LLCP_TLV_RW, &rw, 0, &rw_tlv_length); |
396 | size += rw_tlv_length; | 404 | size += rw_tlv_length; |
397 | 405 | ||
398 | skb = llcp_allocate_pdu(sock, LLCP_PDU_CC, size); | 406 | skb = llcp_allocate_pdu(sock, LLCP_PDU_CC, size); |
diff --git a/net/nfc/llcp/llcp.c b/net/nfc/llcp/llcp.c index c0048b2395dd..8d547ae9c85b 100644 --- a/net/nfc/llcp/llcp.c +++ b/net/nfc/llcp/llcp.c | |||
@@ -865,6 +865,8 @@ static void nfc_llcp_recv_connect(struct nfc_llcp_local *local, | |||
865 | new_sock = nfc_llcp_sock(new_sk); | 865 | new_sock = nfc_llcp_sock(new_sk); |
866 | new_sock->dev = local->dev; | 866 | new_sock->dev = local->dev; |
867 | new_sock->local = nfc_llcp_local_get(local); | 867 | new_sock->local = nfc_llcp_local_get(local); |
868 | new_sock->rw = sock->rw; | ||
869 | new_sock->miux = sock->miux; | ||
868 | new_sock->remote_miu = local->remote_miu; | 870 | new_sock->remote_miu = local->remote_miu; |
869 | new_sock->nfc_protocol = sock->nfc_protocol; | 871 | new_sock->nfc_protocol = sock->nfc_protocol; |
870 | new_sock->dsap = ssap; | 872 | new_sock->dsap = ssap; |
diff --git a/net/nfc/llcp/sock.c b/net/nfc/llcp/sock.c index 9357a756f7a9..827d7d755d09 100644 --- a/net/nfc/llcp/sock.c +++ b/net/nfc/llcp/sock.c | |||
@@ -290,6 +290,9 @@ static int nfc_llcp_setsockopt(struct socket *sock, int level, int optname, | |||
290 | 290 | ||
291 | release_sock(sk); | 291 | release_sock(sk); |
292 | 292 | ||
293 | pr_debug("%p rw %d miux %d\n", llcp_sock, | ||
294 | llcp_sock->rw, llcp_sock->miux); | ||
295 | |||
293 | return err; | 296 | return err; |
294 | } | 297 | } |
295 | 298 | ||
@@ -915,6 +918,8 @@ struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp) | |||
915 | 918 | ||
916 | llcp_sock->ssap = 0; | 919 | llcp_sock->ssap = 0; |
917 | llcp_sock->dsap = LLCP_SAP_SDP; | 920 | llcp_sock->dsap = LLCP_SAP_SDP; |
921 | llcp_sock->rw = LLCP_MAX_RW + 1; | ||
922 | llcp_sock->miux = LLCP_MAX_MIUX + 1; | ||
918 | llcp_sock->remote_rw = LLCP_DEFAULT_RW; | 923 | llcp_sock->remote_rw = LLCP_DEFAULT_RW; |
919 | llcp_sock->remote_miu = LLCP_DEFAULT_MIU; | 924 | llcp_sock->remote_miu = LLCP_DEFAULT_MIU; |
920 | llcp_sock->send_n = llcp_sock->send_ack_n = 0; | 925 | llcp_sock->send_n = llcp_sock->send_ack_n = 0; |