#include <linux/module.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/sched/signal.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/iso.h>
#include "eir.h"
static const struct proto_ops iso_sock_ops;
static struct bt_sock_list iso_sk_list = …;
struct iso_conn { … };
#define iso_conn_lock(c) …
#define iso_conn_unlock(c) …
static void iso_sock_close(struct sock *sk);
static void iso_sock_kill(struct sock *sk);
#define iso_pi(sk) …
#define EIR_SERVICE_DATA_LENGTH …
#define BASE_MAX_LENGTH …
#define EIR_BAA_SERVICE_UUID …
enum { … };
struct iso_pinfo { … };
static struct bt_iso_qos default_qos;
static bool check_ucast_qos(struct bt_iso_qos *qos);
static bool check_bcast_qos(struct bt_iso_qos *qos);
static bool iso_match_sid(struct sock *sk, void *data);
static bool iso_match_sync_handle(struct sock *sk, void *data);
static bool iso_match_sync_handle_pa_report(struct sock *sk, void *data);
static void iso_sock_disconn(struct sock *sk);
iso_sock_match_t;
static struct sock *iso_get_sock(bdaddr_t *src, bdaddr_t *dst,
enum bt_sock_state state,
iso_sock_match_t match, void *data);
#define ISO_CONN_TIMEOUT …
#define ISO_DISCONN_TIMEOUT …
static void iso_sock_timeout(struct work_struct *work)
{ … }
static void iso_sock_set_timer(struct sock *sk, long timeout)
{ … }
static void iso_sock_clear_timer(struct sock *sk)
{ … }
static struct iso_conn *iso_conn_add(struct hci_conn *hcon)
{ … }
static void iso_chan_del(struct sock *sk, int err)
{ … }
static void iso_conn_del(struct hci_conn *hcon, int err)
{ … }
static int __iso_chan_add(struct iso_conn *conn, struct sock *sk,
struct sock *parent)
{ … }
static int iso_chan_add(struct iso_conn *conn, struct sock *sk,
struct sock *parent)
{ … }
static inline u8 le_addr_type(u8 bdaddr_type)
{ … }
static int iso_connect_bis(struct sock *sk)
{ … }
static int iso_connect_cis(struct sock *sk)
{ … }
static struct bt_iso_qos *iso_sock_get_qos(struct sock *sk)
{ … }
static int iso_send_frame(struct sock *sk, struct sk_buff *skb)
{ … }
static void iso_recv_frame(struct iso_conn *conn, struct sk_buff *skb)
{ … }
static struct sock *__iso_get_sock_listen_by_addr(bdaddr_t *src, bdaddr_t *dst)
{ … }
static struct sock *__iso_get_sock_listen_by_sid(bdaddr_t *ba, bdaddr_t *bc,
__u8 sid)
{ … }
static struct sock *iso_get_sock(bdaddr_t *src, bdaddr_t *dst,
enum bt_sock_state state,
iso_sock_match_t match, void *data)
{ … }
static struct sock *iso_get_sock_big(struct sock *match_sk, bdaddr_t *src,
bdaddr_t *dst, uint8_t big)
{ … }
static void iso_sock_destruct(struct sock *sk)
{ … }
static void iso_sock_cleanup_listen(struct sock *parent)
{ … }
static void iso_sock_kill(struct sock *sk)
{ … }
static void iso_sock_disconn(struct sock *sk)
{ … }
static void __iso_sock_close(struct sock *sk)
{ … }
static void iso_sock_close(struct sock *sk)
{ … }
static void iso_sock_init(struct sock *sk, struct sock *parent)
{ … }
static struct proto iso_proto = …;
#define DEFAULT_IO_QOS …
static struct bt_iso_qos default_qos = …;
static struct sock *iso_sock_alloc(struct net *net, struct socket *sock,
int proto, gfp_t prio, int kern)
{ … }
static int iso_sock_create(struct net *net, struct socket *sock, int protocol,
int kern)
{ … }
static int iso_sock_bind_bc(struct socket *sock, struct sockaddr *addr,
int addr_len)
{ … }
static int iso_sock_bind_pa_sk(struct sock *sk, struct sockaddr_iso *sa,
int addr_len)
{ … }
static int iso_sock_bind(struct socket *sock, struct sockaddr *addr,
int addr_len)
{ … }
static int iso_sock_connect(struct socket *sock, struct sockaddr *addr,
int alen, int flags)
{ … }
static int iso_listen_bis(struct sock *sk)
{ … }
static int iso_listen_cis(struct sock *sk)
{ … }
static int iso_sock_listen(struct socket *sock, int backlog)
{ … }
static int iso_sock_accept(struct socket *sock, struct socket *newsock,
struct proto_accept_arg *arg)
{ … }
static int iso_sock_getname(struct socket *sock, struct sockaddr *addr,
int peer)
{ … }
static int iso_sock_sendmsg(struct socket *sock, struct msghdr *msg,
size_t len)
{ … }
static void iso_conn_defer_accept(struct hci_conn *conn)
{ … }
static void iso_conn_big_sync(struct sock *sk)
{ … }
static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
size_t len, int flags)
{ … }
static bool check_io_qos(struct bt_iso_io_qos *qos)
{ … }
static bool check_ucast_qos(struct bt_iso_qos *qos)
{ … }
static bool check_bcast_qos(struct bt_iso_qos *qos)
{ … }
static int iso_sock_setsockopt(struct socket *sock, int level, int optname,
sockptr_t optval, unsigned int optlen)
{ … }
static int iso_sock_getsockopt(struct socket *sock, int level, int optname,
char __user *optval, int __user *optlen)
{ … }
static int iso_sock_shutdown(struct socket *sock, int how)
{ … }
static int iso_sock_release(struct socket *sock)
{ … }
static void iso_sock_ready(struct sock *sk)
{ … }
static bool iso_match_big(struct sock *sk, void *data)
{ … }
static bool iso_match_pa_sync_flag(struct sock *sk, void *data)
{ … }
static void iso_conn_ready(struct iso_conn *conn)
{ … }
static bool iso_match_sid(struct sock *sk, void *data)
{ … }
static bool iso_match_sync_handle(struct sock *sk, void *data)
{ … }
static bool iso_match_sync_handle_pa_report(struct sock *sk, void *data)
{ … }
int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
{ … }
static void iso_connect_cfm(struct hci_conn *hcon, __u8 status)
{ … }
static void iso_disconn_cfm(struct hci_conn *hcon, __u8 reason)
{ … }
void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
{ … }
static struct hci_cb iso_cb = …;
static int iso_debugfs_show(struct seq_file *f, void *p)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
static struct dentry *iso_debugfs;
static const struct proto_ops iso_sock_ops = …;
static const struct net_proto_family iso_sock_family_ops = …;
static bool iso_inited;
bool iso_enabled(void)
{ … }
int iso_init(void)
{ … }
int iso_exit(void)
{ … }