projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[cascardo/linux.git]
/
net
/
bluetooth
/
rfcomm
/
sock.c
diff --git
a/net/bluetooth/rfcomm/sock.c
b/net/bluetooth/rfcomm/sock.c
index
072938d
..
3c2d3e4
100644
(file)
--- a/
net/bluetooth/rfcomm/sock.c
+++ b/
net/bluetooth/rfcomm/sock.c
@@
-87,7
+87,8
@@
static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
parent->sk_data_ready(parent, 0);
} else {
if (d->state == BT_CONNECTED)
parent->sk_data_ready(parent, 0);
} else {
if (d->state == BT_CONNECTED)
- rfcomm_session_getaddr(d->session, &bt_sk(sk)->src, NULL);
+ rfcomm_session_getaddr(d->session,
+ &rfcomm_pi(sk)->src, NULL);
sk->sk_state_change(sk);
}
sk->sk_state_change(sk);
}
@@
-110,7
+111,7
@@
static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
sk_for_each(sk, &rfcomm_sk_list.head) {
if (rfcomm_pi(sk)->channel == channel &&
sk_for_each(sk, &rfcomm_sk_list.head) {
if (rfcomm_pi(sk)->channel == channel &&
- !bacmp(&
bt_sk
(sk)->src, src))
+ !bacmp(&
rfcomm_pi
(sk)->src, src))
break;
}
break;
}
@@
-132,11
+133,11
@@
static struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *
if (rfcomm_pi(sk)->channel == channel) {
/* Exact match. */
if (rfcomm_pi(sk)->channel == channel) {
/* Exact match. */
- if (!bacmp(&
bt_sk
(sk)->src, src))
+ if (!bacmp(&
rfcomm_pi
(sk)->src, src))
break;
/* Closest match */
break;
/* Closest match */
- if (!bacmp(&
bt_sk
(sk)->src, BDADDR_ANY))
+ if (!bacmp(&
rfcomm_pi
(sk)->src, BDADDR_ANY))
sk1 = sk;
}
}
sk1 = sk;
}
}
@@
-355,7
+356,7
@@
static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr
err = -EADDRINUSE;
} else {
/* Save source address */
err = -EADDRINUSE;
} else {
/* Save source address */
- bacpy(&
bt_sk
(sk)->src, &sa->rc_bdaddr);
+ bacpy(&
rfcomm_pi
(sk)->src, &sa->rc_bdaddr);
rfcomm_pi(sk)->channel = sa->rc_channel;
sk->sk_state = BT_BOUND;
}
rfcomm_pi(sk)->channel = sa->rc_channel;
sk->sk_state = BT_BOUND;
}
@@
-393,13
+394,14
@@
static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int a
}
sk->sk_state = BT_CONNECT;
}
sk->sk_state = BT_CONNECT;
- bacpy(&
bt_sk
(sk)->dst, &sa->rc_bdaddr);
+ bacpy(&
rfcomm_pi
(sk)->dst, &sa->rc_bdaddr);
rfcomm_pi(sk)->channel = sa->rc_channel;
d->sec_level = rfcomm_pi(sk)->sec_level;
d->role_switch = rfcomm_pi(sk)->role_switch;
rfcomm_pi(sk)->channel = sa->rc_channel;
d->sec_level = rfcomm_pi(sk)->sec_level;
d->role_switch = rfcomm_pi(sk)->role_switch;
- err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
+ err = rfcomm_dlc_open(d, &rfcomm_pi(sk)->src, &sa->rc_bdaddr,
+ sa->rc_channel);
if (!err)
err = bt_sock_wait_state(sk, BT_CONNECTED,
sock_sndtimeo(sk, flags & O_NONBLOCK));
if (!err)
err = bt_sock_wait_state(sk, BT_CONNECTED,
sock_sndtimeo(sk, flags & O_NONBLOCK));
@@
-429,7
+431,7
@@
static int rfcomm_sock_listen(struct socket *sock, int backlog)
}
if (!rfcomm_pi(sk)->channel) {
}
if (!rfcomm_pi(sk)->channel) {
- bdaddr_t *src = &
bt_sk
(sk)->src;
+ bdaddr_t *src = &
rfcomm_pi
(sk)->src;
u8 channel;
err = -EINVAL;
u8 channel;
err = -EINVAL;
@@
-530,9
+532,9
@@
static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *
sa->rc_family = AF_BLUETOOTH;
sa->rc_channel = rfcomm_pi(sk)->channel;
if (peer)
sa->rc_family = AF_BLUETOOTH;
sa->rc_channel = rfcomm_pi(sk)->channel;
if (peer)
- bacpy(&sa->rc_bdaddr, &
bt_sk
(sk)->dst);
+ bacpy(&sa->rc_bdaddr, &
rfcomm_pi
(sk)->dst);
else
else
- bacpy(&sa->rc_bdaddr, &
bt_sk
(sk)->src);
+ bacpy(&sa->rc_bdaddr, &
rfcomm_pi
(sk)->src);
*len = sizeof(struct sockaddr_rc);
return 0;
*len = sizeof(struct sockaddr_rc);
return 0;
@@
-613,7
+615,6
@@
static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
rfcomm_dlc_accept(d);
if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
rfcomm_dlc_accept(d);
- msg->msg_namelen = 0;
return 0;
}
return 0;
}
@@
-737,8
+738,9
@@
static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, c
static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
{
struct sock *sk = sock->sk;
static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
{
struct sock *sk = sock->sk;
+ struct sock *l2cap_sk;
+ struct l2cap_conn *conn;
struct rfcomm_conninfo cinfo;
struct rfcomm_conninfo cinfo;
- struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
int len, err = 0;
u32 opt;
int len, err = 0;
u32 opt;
@@
-781,6
+783,9
@@
static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u
break;
}
break;
}
+ l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
+ conn = l2cap_pi(l2cap_sk)->chan->conn;
+
memset(&cinfo, 0, sizeof(cinfo));
cinfo.hci_handle = conn->hcon->handle;
memcpy(cinfo.dev_class, conn->hcon->dev_class, 3);
memset(&cinfo, 0, sizeof(cinfo));
cinfo.hci_handle = conn->hcon->handle;
memcpy(cinfo.dev_class, conn->hcon->dev_class, 3);
@@
-951,8
+956,8
@@
int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc *
bt_sock_reclassify_lock(sk, BTPROTO_RFCOMM);
rfcomm_sock_init(sk, parent);
bt_sock_reclassify_lock(sk, BTPROTO_RFCOMM);
rfcomm_sock_init(sk, parent);
- bacpy(&
bt_sk
(sk)->src, &src);
- bacpy(&
bt_sk
(sk)->dst, &dst);
+ bacpy(&
rfcomm_pi
(sk)->src, &src);
+ bacpy(&
rfcomm_pi
(sk)->dst, &dst);
rfcomm_pi(sk)->channel = channel;
sk->sk_state = BT_CONFIG;
rfcomm_pi(sk)->channel = channel;
sk->sk_state = BT_CONFIG;
@@
-979,7
+984,7
@@
static int rfcomm_sock_debugfs_show(struct seq_file *f, void *p)
sk_for_each(sk, &rfcomm_sk_list.head) {
seq_printf(f, "%pMR %pMR %d %d\n",
sk_for_each(sk, &rfcomm_sk_list.head) {
seq_printf(f, "%pMR %pMR %d %d\n",
- &
bt_sk(sk)->src, &bt_sk
(sk)->dst,
+ &
rfcomm_pi(sk)->src, &rfcomm_pi
(sk)->dst,
sk->sk_state, rfcomm_pi(sk)->channel);
}
sk->sk_state, rfcomm_pi(sk)->channel);
}
@@
-1049,15
+1054,15
@@
int __init rfcomm_init_sockets(void)
goto error;
}
goto error;
}
- if (bt_debugfs) {
- rfcomm_sock_debugfs = debugfs_create_file("rfcomm", 0444,
- bt_debugfs, NULL, &rfcomm_sock_debugfs_fops);
- if (!rfcomm_sock_debugfs)
- BT_ERR("Failed to create RFCOMM debug file");
- }
-
BT_INFO("RFCOMM socket layer initialized");
BT_INFO("RFCOMM socket layer initialized");
+ if (IS_ERR_OR_NULL(bt_debugfs))
+ return 0;
+
+ rfcomm_sock_debugfs = debugfs_create_file("rfcomm", 0444,
+ bt_debugfs, NULL,
+ &rfcomm_sock_debugfs_fops);
+
return 0;
error:
return 0;
error: