diff options
| author | Samuel Ortiz <sameo@linux.intel.com> | 2013-02-22 05:38:05 -0500 |
|---|---|---|
| committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-03-10 17:20:05 -0400 |
| commit | 06d44f806aafdafefec789583aba5f8bef301c0c (patch) | |
| tree | 20994de06b6e992acb62409c5f2905f9812bbd21 /net/nfc/llcp | |
| parent | 26fd76cab2e61cedc5c25f7151fb31b57ddc53c7 (diff) | |
NFC: llcp: Use socket specific link parameters before the local ones
If the socket link options are set, use them before the local one.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc/llcp')
| -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; |
