蓝牙协议-----之pan profile on bluedroid

转发自https://blog.csdn.net/xiaojsj111/article/details/37597859

1蓝牙pan profile协议的概述

1.1 协议层次结构

蓝牙pan就是我们熟知的蓝牙网络,他在蓝牙协议体系中的层次结构见如下图:

BNEP相当于网络协议栈中的链路层,由该层虚拟出一个网络接口,而BNEP层以下就是蓝牙核心协议之一的L2CAP。这个是在蓝牙协议中的层次结构,具体在bluedroid中的层次结构,跟这个有点出入。但基本都差不多的。

1.2 BNEP包的类型和格式

上图中的BNEP层收到的数据包是以太网格式的,需要将他重现拆分打包成适合BNEP over L2CAP来传输,所以在BNEP层需要将ip层下来的以太网头去掉,再加上BNEP的头,当这个BNEP包传输到l2cap层时,又会被加上L2cap的头,他们的包头格式的变换如下图所示:

1.3 BNEP包的类型

上图中的BNEP Header的格式基本是遵循如下图所示的格式,但具体的格式是依赖于BNEP TYPE的,不同的type他们的BNEP header是有所不同的。

0                  8      12     16     20    24     28     31

BNEP TYPEEBNEP Packet based on BNEP Type ...

以上各字段的解析如下:

BNEP

Type:取值范围:0x00 –0x7F,Seven bit Bluetooth Network Encapsulation Protocol

Type value identifies the type of BNEP header contained in this

packet.Values are defined in the following Table 1

Extension

Flag (E):One bit extension flag that indicates if one or more extension

headers follow the BNEP Header before the data payload. If the

extension flag is equal to 0x1 then one or more extension headers

follows the BNEP header.  If the extension flag is equal to 0x0 then the

BNEP payload follows the BNEP header

 以上各种BNEP包类型,重点描述0x01和0x2类型,其他的请详见BNEP的协议描述。

1.4 BNEP control packet type

BNEP_ CONTROL Packet Type Header Format:The BNEP_ CONTROL packet type header format is shown in the following Figure。

This

packet type is mandatory to recognize and respond to accordingly.  The

BNEP_CONTROL packet type is used to exchange control information

上图中的BNEP control type有如下种类,他们主要用于BNEP连接的建立和断开,及设置网络滤包。但需要注意的是,由于BNEP连接是建立在l2cap连接之上的,所以需要先建立l2cap连接。

1.4.1 BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD

BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD Control Command Packet:

This

packet shall be used to reply to any control message received, which

contains an unknown BNEP control type value.  This allows devices to

response to control message that may be used in the future

1.4.2 BNEP_SETUP_CONTROL Packets

This

packet type shall contain control messages used to setup the initial

connection information about the BNEP connection.  All devices that

support BNEP shall be able to recognize and respond to

accordingly to all BNEP_SETUP_CONTROL packets BNEP_SETUP_CONTROL packet

types must be processed in order that they are received.  For each

connection, only one outstanding BNEP_SETUP_CONTROL message is

allowed.   A response message must be used to respond

to each control message received.  If a response message is not

received, after Tcrt time has elapsed, then the outstanding

BNEP_SETUP_CONTROL message can be assumed to be lost and the same

BNEP_SETUP_CONTROL message can be retransmitted.  The range for Tcrt

is from 1 second to 30 seconds, with a suggested timeout value to be 10

seconds. BNEP packets of type BNEP_SETUP_CONTROL are for the device

with direct connection communication only, and must never be forwarded.

1.4.2.1 BNEP_SETUP_CONNECTION_REQUEST_MSG

BNEP_SETUP_CONNECTION_REQUEST_MSG setup control message format:

The BNEP_SETUP_CONNECTION_REQUEST_MSG setup control message format is shown in the following Figure:

The

purpose of this control message is to inform the peer entity the

destination and source SDP service UUIDs [8] whichare being used for

this BNEP connection.  The device, which is establishing the

L2CAP connection for BNEP, is required to send this packet and receive a

successful response before sending any additional packets with other

BNEP packet types.  This setup packet SHALL be successfully transmitted

to the other device and successfully responded

to by that device before sending any other BNEP packets.  In addition,

the BNEP setup message can be used to switch the current roles for the

BNEP connection

1.4.2.2 BNEP_SETUP_ CONNECTION_RESPONSE_MSG

BNEP_SETUP_ CONNECTION_RESPONSE_MSG response message format:

The

BNEP_SETUP_ CONNECTION_RESPONSE_MSG response message format is shown in

the following Figure,The response message shall be used to respond to

each BNEP_SETUP_CONNECTION_REQUEST_MSG control message. 

Each of the received setup control messages must be responded to by one

response message.

控制类型的包的解析就到此为止,因为其他的控制包类型都是可选的,就不再累述了。下面描述第二种包。

1.5 BNEP_COMPRESSED_ETHERNET Packet Type

BNEP_COMPRESSED_ETHERNET Packet Type Header Format:

The BNEP_COMPRESSED_ETHERNET packet type header format is shown in the following Figure

his packet type shall be used to carry Ethernet packets to and from devices that are directly connected at

L2CAP

level (have a valid L2CAP connection handle) using BNEP.  This

compressed header may be used when two Bluetooth devices are exchanging

packets, in which the source address is set to the local device’s

address which is the source device sending the packet and destination

addresses is set to the other device’s address which is the final

destination for the packet.   Devices do not need to include the source

or destination addresses in the packet because the destination address

is always the device’s address that received the packet and the source

address is always the device’s address that sent the packet

1.6 BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY

BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY Packet Type Header:

The header format is based on one of the compressed versions of the Ethernet header supported by BNEP.  This

packet

type will be used to carry Ethernet packets to a device using BNEP,

which is the final destination for that packet.  Devices do not need to

include the destination address in the packet, because the destination

address of the BNEP packet is the same as the address corresponding to

the L2CAP channel over which the packet is sent.

1.7 BNEP_COMPRESSED_ETHERNET_DEST_ONLY

BNEP_COMPRESSED_ETHERNET_DEST_ONLY Packet Type Header:

This

packet type shall be used to carry Ethernet packets from a device using

BNEP, which is the originator of that packet.  Devices do not need to

include the source address in the packet, because the source address can

be determined from the L2CAP connection and which device sent the

packet.The destination may be an IEEE Ethernet address, if the actual

destination is an

IEEE device and not a Bluetooth device.

至此我们在bluedroid BNEP协议的实现中要用到的主要包类型已经描述完毕。下面开始具体的实现环节。

2蓝牙pan在bluedroid中的层次结构

蓝牙pan profile在android bluedroid代码结构中的层次关系如下:

从上到下:hal层提供给上层的调用接口为(callin):btpan_interface_t pan_if,同时上层提供给pan profile的回调接口(callback)为:btpan_callbacks_t。

callin接口用来接收上层的命令,而callback接口用来给上层返回状态等事件。PAN

HAL层以下就是PAN BTA层,也就是pan的应用层,而BTA层以下就是pan 的核心stack层,包含两部分,一个部分是stack

pan,一个部分是stack bnep,前者基于后者,最后bnep是基于l2cap层。

而层与层之间,都是通过callin 和callback来进行交互,最终达到信息在各层次间的交流。

具体到每层的实现,基本都是分为三个子模块:api

submod,main submod,utils submod。其中api submod提供给上层调用该层的接口,而main

submod会提供给上层一个注册函数,用于注册上层的回调函数,另外一个主要功能就是状态机的维护和迁移;在有状态机的模块通常还包含一个action

submod,该模块就是在状态迁移时,需要执行的动作都定义在该模块中;而utils

subsys就是工具和辅助函数。

3蓝牙pan的链接过程

下图再结合上图,你就可以清楚的看到,一个命令是如何在上层传递到下层,并且命令的事件是如何通过各层的callback从下层传递回上层的。

前面我们知道,BNEP的连接是建立在l2cap连接之上的,从上面的连接时序图中,我们可以清楚的看到,BNEP的连接过程的半段就是l2cap的连接(连接情况的发起,链路的配置等),然后才是BNEP链路的连接。上图中,箭头从左到右的是上层命令传递到下层的一个流程;而箭头从右到左就是命令的事件从下层通过回调传递到上层的流程。

4蓝牙pan的数据收发过程

4.1 pan的数据发送过程

上述的过程,需要注意以太网的头是如何在这个过程被去掉的,并且BNEP的头是如何被添加进来的,最后传递到l2cap层,并由l2cap层添加l2cap的头。

4.2 pan数据的接

数据接收的过程,就是进来的数据一路从下层回调到上层的过程。

5 从sniffer log看bnep的连接过程(role:panu)

下图就是bnep连接过程,对应的l2cap连接的过程,对应下图包序号的348到355.简单的描述就是链路连接的发起和配置过程。

 下面就是在l2cap连接建立的基础上,发起Bnep层的连接的过程,很简单就两个包,然后数据在通讯过程中,基本都是使用的compressed ethernet package,因为发送和接受放都是l2cap的两端,所以src和dest地址都可以省略掉。 

 在上图中,我们可以看到还有好几个compressed

ethernet dest only 包,这些包其实就是对应的arp request包,因为这些包的dest

地址都是广播地址,并不是l2cap接收端的蓝牙mac地址,所以需要使用这个只包含dest only的compressed ethernet包。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,279评论 0 10
  • 今天朋友闹心了,原因是感觉新交的男友没有把她放在心上,给她打了电话聊了聊。而后,我就想到了一句话“追求莫强...
    张馨匀阅读 578评论 0 2
  • 红色收藏藏品历史背景 联队是日本在第二次世界大战中的团一级作战单位,与其他国家的部队编制有所区别。 红色收藏馆...
    c30b8ff8ff3b阅读 589评论 0 0
  • 安装java 在运行程序时候报错,说找不到 JAVA_HOME ,然后我们手动在.zshrc和.bashrc中设置...
    hopless阅读 299评论 0 0
  • 前段时间为 Smartisan OS 1.1.0提出的改进建议分享出来给大家看一看哈(部分问题已在 Smartis...
    浩槐阅读 751评论 0 1