Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
4e34c50b
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
4e34c50b
编写于
2月 04, 2011
作者:
G
Gustavo F. Padovan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Bluetooth: move l2cap_sock_connect() to l2cap_sock.c
Signed-off-by:
N
Gustavo F. Padovan
<
padovan@profusion.mobi
>
上级
99f4808d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
87 addition
and
87 deletion
+87
-87
include/net/bluetooth/l2cap.h
include/net/bluetooth/l2cap.h
+1
-1
net/bluetooth/l2cap_core.c
net/bluetooth/l2cap_core.c
+1
-86
net/bluetooth/l2cap_sock.c
net/bluetooth/l2cap_sock.c
+85
-0
未找到文件。
include/net/bluetooth/l2cap.h
浏览文件 @
4e34c50b
...
...
@@ -437,8 +437,8 @@ void l2cap_sock_kill(struct sock *sk);
void
l2cap_sock_init
(
struct
sock
*
sk
,
struct
sock
*
parent
);
struct
sock
*
l2cap_sock_alloc
(
struct
net
*
net
,
struct
socket
*
sock
,
int
proto
,
gfp_t
prio
);
int
l2cap_do_connect
(
struct
sock
*
sk
);
int
l2cap_sock_connect
(
struct
socket
*
sock
,
struct
sockaddr
*
addr
,
int
alen
,
int
flags
);
int
l2cap_sock_sendmsg
(
struct
kiocb
*
iocb
,
struct
socket
*
sock
,
struct
msghdr
*
msg
,
size_t
len
);
int
l2cap_sock_recvmsg
(
struct
kiocb
*
iocb
,
struct
socket
*
sock
,
struct
msghdr
*
msg
,
size_t
len
,
int
flags
);
int
l2cap_sock_shutdown
(
struct
socket
*
sock
,
int
how
);
...
...
net/bluetooth/l2cap_core.c
浏览文件 @
4e34c50b
...
...
@@ -848,7 +848,7 @@ static void l2cap_sock_close(struct sock *sk)
l2cap_sock_kill
(
sk
);
}
static
int
l2cap_do_connect
(
struct
sock
*
sk
)
int
l2cap_do_connect
(
struct
sock
*
sk
)
{
bdaddr_t
*
src
=
&
bt_sk
(
sk
)
->
src
;
bdaddr_t
*
dst
=
&
bt_sk
(
sk
)
->
dst
;
...
...
@@ -908,91 +908,6 @@ static int l2cap_do_connect(struct sock *sk)
return
err
;
}
int
l2cap_sock_connect
(
struct
socket
*
sock
,
struct
sockaddr
*
addr
,
int
alen
,
int
flags
)
{
struct
sock
*
sk
=
sock
->
sk
;
struct
sockaddr_l2
la
;
int
len
,
err
=
0
;
BT_DBG
(
"sk %p"
,
sk
);
if
(
!
addr
||
alen
<
sizeof
(
addr
->
sa_family
)
||
addr
->
sa_family
!=
AF_BLUETOOTH
)
return
-
EINVAL
;
memset
(
&
la
,
0
,
sizeof
(
la
));
len
=
min_t
(
unsigned
int
,
sizeof
(
la
),
alen
);
memcpy
(
&
la
,
addr
,
len
);
if
(
la
.
l2_cid
)
return
-
EINVAL
;
lock_sock
(
sk
);
if
((
sk
->
sk_type
==
SOCK_SEQPACKET
||
sk
->
sk_type
==
SOCK_STREAM
)
&&
!
la
.
l2_psm
)
{
err
=
-
EINVAL
;
goto
done
;
}
switch
(
l2cap_pi
(
sk
)
->
mode
)
{
case
L2CAP_MODE_BASIC
:
break
;
case
L2CAP_MODE_ERTM
:
case
L2CAP_MODE_STREAMING
:
if
(
!
disable_ertm
)
break
;
/* fall through */
default:
err
=
-
ENOTSUPP
;
goto
done
;
}
switch
(
sk
->
sk_state
)
{
case
BT_CONNECT
:
case
BT_CONNECT2
:
case
BT_CONFIG
:
/* Already connecting */
goto
wait
;
case
BT_CONNECTED
:
/* Already connected */
err
=
-
EISCONN
;
goto
done
;
case
BT_OPEN
:
case
BT_BOUND
:
/* Can connect */
break
;
default:
err
=
-
EBADFD
;
goto
done
;
}
/* PSM must be odd and lsb of upper byte must be 0 */
if
((
__le16_to_cpu
(
la
.
l2_psm
)
&
0x0101
)
!=
0x0001
&&
sk
->
sk_type
!=
SOCK_RAW
)
{
err
=
-
EINVAL
;
goto
done
;
}
/* Set destination address and psm */
bacpy
(
&
bt_sk
(
sk
)
->
dst
,
&
la
.
l2_bdaddr
);
l2cap_pi
(
sk
)
->
psm
=
la
.
l2_psm
;
err
=
l2cap_do_connect
(
sk
);
if
(
err
)
goto
done
;
wait:
err
=
bt_sock_wait_state
(
sk
,
BT_CONNECTED
,
sock_sndtimeo
(
sk
,
flags
&
O_NONBLOCK
));
done:
release_sock
(
sk
);
return
err
;
}
static
int
__l2cap_wait_ack
(
struct
sock
*
sk
)
{
DECLARE_WAITQUEUE
(
wait
,
current
);
...
...
net/bluetooth/l2cap_sock.c
浏览文件 @
4e34c50b
...
...
@@ -139,6 +139,91 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
return
err
;
}
static
int
l2cap_sock_connect
(
struct
socket
*
sock
,
struct
sockaddr
*
addr
,
int
alen
,
int
flags
)
{
struct
sock
*
sk
=
sock
->
sk
;
struct
sockaddr_l2
la
;
int
len
,
err
=
0
;
BT_DBG
(
"sk %p"
,
sk
);
if
(
!
addr
||
alen
<
sizeof
(
addr
->
sa_family
)
||
addr
->
sa_family
!=
AF_BLUETOOTH
)
return
-
EINVAL
;
memset
(
&
la
,
0
,
sizeof
(
la
));
len
=
min_t
(
unsigned
int
,
sizeof
(
la
),
alen
);
memcpy
(
&
la
,
addr
,
len
);
if
(
la
.
l2_cid
)
return
-
EINVAL
;
lock_sock
(
sk
);
if
((
sk
->
sk_type
==
SOCK_SEQPACKET
||
sk
->
sk_type
==
SOCK_STREAM
)
&&
!
la
.
l2_psm
)
{
err
=
-
EINVAL
;
goto
done
;
}
switch
(
l2cap_pi
(
sk
)
->
mode
)
{
case
L2CAP_MODE_BASIC
:
break
;
case
L2CAP_MODE_ERTM
:
case
L2CAP_MODE_STREAMING
:
if
(
!
disable_ertm
)
break
;
/* fall through */
default:
err
=
-
ENOTSUPP
;
goto
done
;
}
switch
(
sk
->
sk_state
)
{
case
BT_CONNECT
:
case
BT_CONNECT2
:
case
BT_CONFIG
:
/* Already connecting */
goto
wait
;
case
BT_CONNECTED
:
/* Already connected */
err
=
-
EISCONN
;
goto
done
;
case
BT_OPEN
:
case
BT_BOUND
:
/* Can connect */
break
;
default:
err
=
-
EBADFD
;
goto
done
;
}
/* PSM must be odd and lsb of upper byte must be 0 */
if
((
__le16_to_cpu
(
la
.
l2_psm
)
&
0x0101
)
!=
0x0001
&&
sk
->
sk_type
!=
SOCK_RAW
)
{
err
=
-
EINVAL
;
goto
done
;
}
/* Set destination address and psm */
bacpy
(
&
bt_sk
(
sk
)
->
dst
,
&
la
.
l2_bdaddr
);
l2cap_pi
(
sk
)
->
psm
=
la
.
l2_psm
;
err
=
l2cap_do_connect
(
sk
);
if
(
err
)
goto
done
;
wait:
err
=
bt_sock_wait_state
(
sk
,
BT_CONNECTED
,
sock_sndtimeo
(
sk
,
flags
&
O_NONBLOCK
));
done:
release_sock
(
sk
);
return
err
;
}
static
int
l2cap_sock_listen
(
struct
socket
*
sock
,
int
backlog
)
{
struct
sock
*
sk
=
sock
->
sk
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录