Skip to content

Commit 311527e

Browse files
iulia-tanasescuVudentz
authored andcommitted
Bluetooth: ISO: Make iso_get_sock_listen generic
This makes iso_get_sock_listen more generic, to return matching socket in the state provided as argument. Signed-off-by: Iulia Tanasescu <[email protected]> Signed-off-by: Luiz Augusto von Dentz <[email protected]>
1 parent 2e2515c commit 311527e

File tree

2 files changed

+43
-34
lines changed

2 files changed

+43
-34
lines changed

include/net/bluetooth/bluetooth.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ void bt_err_ratelimited(const char *fmt, ...);
285285
bt_err_ratelimited("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
286286

287287
/* Connection and socket states */
288-
enum {
288+
enum bt_sock_state {
289289
BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */
290290
BT_OPEN,
291291
BT_BOUND,

net/bluetooth/iso.c

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ static void iso_sock_disconn(struct sock *sk);
8585

8686
typedef bool (*iso_sock_match_t)(struct sock *sk, void *data);
8787

88-
static struct sock *iso_get_sock_listen(bdaddr_t *src, bdaddr_t *dst,
89-
iso_sock_match_t match, void *data);
88+
static struct sock *iso_get_sock(bdaddr_t *src, bdaddr_t *dst,
89+
enum bt_sock_state state,
90+
iso_sock_match_t match, void *data);
9091

9192
/* ---- ISO timers ---- */
9293
#define ISO_CONN_TIMEOUT (HZ * 40)
@@ -233,10 +234,11 @@ static void iso_conn_del(struct hci_conn *hcon, int err)
233234
* terminated are not processed anymore.
234235
*/
235236
if (test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags)) {
236-
parent = iso_get_sock_listen(&hcon->src,
237-
&hcon->dst,
238-
iso_match_conn_sync_handle,
239-
hcon);
237+
parent = iso_get_sock(&hcon->src,
238+
&hcon->dst,
239+
BT_LISTEN,
240+
iso_match_conn_sync_handle,
241+
hcon);
240242

241243
if (parent) {
242244
set_bit(BT_SK_PA_SYNC_TERM,
@@ -581,22 +583,23 @@ static struct sock *__iso_get_sock_listen_by_sid(bdaddr_t *ba, bdaddr_t *bc,
581583
return NULL;
582584
}
583585

584-
/* Find socket listening:
586+
/* Find socket in given state:
585587
* source bdaddr (Unicast)
586588
* destination bdaddr (Broadcast only)
587589
* match func - pass NULL to ignore
588590
* match func data - pass -1 to ignore
589591
* Returns closest match.
590592
*/
591-
static struct sock *iso_get_sock_listen(bdaddr_t *src, bdaddr_t *dst,
592-
iso_sock_match_t match, void *data)
593+
static struct sock *iso_get_sock(bdaddr_t *src, bdaddr_t *dst,
594+
enum bt_sock_state state,
595+
iso_sock_match_t match, void *data)
593596
{
594597
struct sock *sk = NULL, *sk1 = NULL;
595598

596599
read_lock(&iso_sk_list.lock);
597600

598601
sk_for_each(sk, &iso_sk_list.head) {
599-
if (sk->sk_state != BT_LISTEN)
602+
if (sk->sk_state != state)
600603
continue;
601604

602605
/* Match Broadcast destination */
@@ -1777,32 +1780,37 @@ static void iso_conn_ready(struct iso_conn *conn)
17771780
HCI_EVT_LE_BIG_SYNC_ESTABILISHED);
17781781

17791782
/* Get reference to PA sync parent socket, if it exists */
1780-
parent = iso_get_sock_listen(&hcon->src,
1781-
&hcon->dst,
1782-
iso_match_pa_sync_flag, NULL);
1783+
parent = iso_get_sock(&hcon->src, &hcon->dst,
1784+
BT_LISTEN,
1785+
iso_match_pa_sync_flag,
1786+
NULL);
17831787
if (!parent && ev)
1784-
parent = iso_get_sock_listen(&hcon->src,
1785-
&hcon->dst,
1786-
iso_match_big, ev);
1788+
parent = iso_get_sock(&hcon->src,
1789+
&hcon->dst,
1790+
BT_LISTEN,
1791+
iso_match_big, ev);
17871792
} else if (test_bit(HCI_CONN_PA_SYNC_FAILED, &hcon->flags)) {
17881793
ev2 = hci_recv_event_data(hcon->hdev,
17891794
HCI_EV_LE_PA_SYNC_ESTABLISHED);
17901795
if (ev2)
1791-
parent = iso_get_sock_listen(&hcon->src,
1792-
&hcon->dst,
1793-
iso_match_sid, ev2);
1796+
parent = iso_get_sock(&hcon->src,
1797+
&hcon->dst,
1798+
BT_LISTEN,
1799+
iso_match_sid, ev2);
17941800
} else if (test_bit(HCI_CONN_PA_SYNC, &hcon->flags)) {
17951801
ev3 = hci_recv_event_data(hcon->hdev,
17961802
HCI_EVT_LE_BIG_INFO_ADV_REPORT);
17971803
if (ev3)
1798-
parent = iso_get_sock_listen(&hcon->src,
1799-
&hcon->dst,
1800-
iso_match_sync_handle, ev3);
1804+
parent = iso_get_sock(&hcon->src,
1805+
&hcon->dst,
1806+
BT_LISTEN,
1807+
iso_match_sync_handle,
1808+
ev3);
18011809
}
18021810

18031811
if (!parent)
1804-
parent = iso_get_sock_listen(&hcon->src,
1805-
BDADDR_ANY, NULL, NULL);
1812+
parent = iso_get_sock(&hcon->src, BDADDR_ANY,
1813+
BT_LISTEN, NULL, NULL);
18061814

18071815
if (!parent)
18081816
return;
@@ -1923,8 +1931,8 @@ int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
19231931
*/
19241932
ev1 = hci_recv_event_data(hdev, HCI_EV_LE_PA_SYNC_ESTABLISHED);
19251933
if (ev1) {
1926-
sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, iso_match_sid,
1927-
ev1);
1934+
sk = iso_get_sock(&hdev->bdaddr, bdaddr, BT_LISTEN,
1935+
iso_match_sid, ev1);
19281936
if (sk && !ev1->status)
19291937
iso_pi(sk)->sync_handle = le16_to_cpu(ev1->handle);
19301938

@@ -1934,12 +1942,12 @@ int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
19341942
ev2 = hci_recv_event_data(hdev, HCI_EVT_LE_BIG_INFO_ADV_REPORT);
19351943
if (ev2) {
19361944
/* Try to get PA sync listening socket, if it exists */
1937-
sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr,
1938-
iso_match_pa_sync_flag, NULL);
1945+
sk = iso_get_sock(&hdev->bdaddr, bdaddr, BT_LISTEN,
1946+
iso_match_pa_sync_flag, NULL);
19391947

19401948
if (!sk) {
1941-
sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr,
1942-
iso_match_sync_handle, ev2);
1949+
sk = iso_get_sock(&hdev->bdaddr, bdaddr, BT_LISTEN,
1950+
iso_match_sync_handle, ev2);
19431951

19441952
/* If PA Sync is in process of terminating,
19451953
* do not handle any more BIGInfo adv reports.
@@ -1979,8 +1987,8 @@ int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
19791987
u8 *base;
19801988
struct hci_conn *hcon;
19811989

1982-
sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr,
1983-
iso_match_sync_handle_pa_report, ev3);
1990+
sk = iso_get_sock(&hdev->bdaddr, bdaddr, BT_LISTEN,
1991+
iso_match_sync_handle_pa_report, ev3);
19841992
if (!sk)
19851993
goto done;
19861994

@@ -2029,7 +2037,8 @@ int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
20292037
hcon->le_per_adv_data_len = 0;
20302038
}
20312039
} else {
2032-
sk = iso_get_sock_listen(&hdev->bdaddr, BDADDR_ANY, NULL, NULL);
2040+
sk = iso_get_sock(&hdev->bdaddr, BDADDR_ANY,
2041+
BT_LISTEN, NULL, NULL);
20332042
}
20342043

20352044
done:

0 commit comments

Comments
 (0)