nearlink_sdr.mac.access¶
接入流程管理 -- TXS-10002-2025 标准 7.1.3。
实现 SLE 设备发现和接入的完整六阶段流程: a) 广播方准备并发送可接入扩展广播帧 b) 接入发起方发送接入请求帧 c) 广播方接收请求并发送响应 d) 接入方接收响应并进入链接态 e) 数据链路建立 f) 安全流程 (委托给 security 模块)
协调 BroadcastFrame、AccessBasicInfo、TransportIndicationInfo、 AccessRequestInfo、AccessResponseInfo 等数据结构完成端到端接入。
Module Contents¶
Classes¶
接入流程配置参数。 |
|
接入流程阶段标识。 |
|
接入白名单 (7.1.6) |
|
广播方接入管理器 (标准 7.1.3 阶段 a/c)。 |
|
发现流程管理器 (标准 7.1.2) |
|
接入发起方管理器 (标准 7.1.3 阶段 b/d)。 |
|
GT 角色协商结果。 |
|
非链接态广播传输配置。 |
|
非链接态广播管理器 (标准 7.1.7.2)。 |
|
解析非链接态广播帧的结果。 |
Functions¶
根据标准 7.1.3 执行 GT 角色协商。 |
|
解析扩展广播帧中的非链接态广播信息 (7.1.7.2)。 |
|
执行完整的端到端接入流程 (标准 7.1.3 阶段 a-e)。 |
Data¶
API¶
- nearlink_sdr.mac.access.MAX_ADV_INTERVAL_US¶
2097151875
- nearlink_sdr.mac.access.MAX_ADV_RANDOM_DELAY_US¶
2000
- nearlink_sdr.mac.access.MIN_ADV_INTERVAL_US¶
4000
- nearlink_sdr.mac.access.MIN_ADV_TO_EXT_ADV_GAP¶
300
- nearlink_sdr.mac.access.MIN_EXT_ADV_TO_REQUEST_GAP¶
300
- nearlink_sdr.mac.access.MIN_REQUEST_TO_RESPONSE_GAP¶
300
- class nearlink_sdr.mac.access.AccessPhase[源代码]¶
Bases:
enum.IntEnum接入流程阶段标识。
Initialization
Initialize self. See help(type(self)) for accurate signature.
- IDLE¶
0
- ADV_SENDING¶
1
- REQ_WINDOW¶
2
- RSP_WINDOW¶
3
- LINK_SETUP¶
4
- COMPLETED¶
5
- class nearlink_sdr.mac.access.AccessWhitelist[源代码]¶
接入白名单 (7.1.6)
广播设备设置白名单后, 只接收白名单中设备的接入请求。 接入设备设置白名单后, 只向白名单中设备发起接入。
- class nearlink_sdr.mac.access.BroadcasterAccessManager[源代码]¶
广播方接入管理器 (标准 7.1.3 阶段 a/c)。
职责:
构造可接入扩展广播帧
处理收到的接入请求
生成接入响应
完成 GT 角色协商
- config: nearlink_sdr.mac.access.AccessConfig¶
'field(...)'
- link_manager: nearlink_sdr.mac.link_manager.LinkManager¶
'field(...)'
- whitelist: nearlink_sdr.mac.access.AccessWhitelist¶
'field(...)'
- build_ext_adv_frame() nearlink_sdr.mac.broadcast.BroadcastFrame[源代码]¶
构建可接入扩展广播帧 (阶段 a)。
包含发现接入资源配置信息 (7.1.4.2)。
- 返回:
填充好的 BroadcastFrame 对象。
- handle_access_request(request_data: bytes, peer_address: bytes = b'\x00' * 6) tuple[nearlink_sdr.mac.broadcast.BroadcastFrame | None, bool][源代码]¶
处理接入请求 (阶段 c)。
- 参数:
request_data -- 接入请求帧数据。
peer_address -- 请求方 MAC 地址。
- 返回:
(响应帧, 是否接受)。响应帧包含 AccessResponseInfo, 以及 (若接受且角色为 G) AccessBasicInfo 或 TransportIndicationInfo。
- reject_access_request(peer_address: bytes = b'\x00' * 6, reason: nearlink_sdr.mac.broadcast.AccessResponseType = AccessResponseType.USER_REJECT) nearlink_sdr.mac.broadcast.BroadcastFrame[源代码]¶
拒绝接入请求。
- 参数:
peer_address -- 请求方 MAC 地址。
reason -- 拒绝原因。
- 返回:
包含拒绝响应的帧。
- class nearlink_sdr.mac.access.DiscoveryManager[源代码]¶
发现流程管理器 (标准 7.1.2)
实现发现设备接收广播帧后的查询请求/响应流程: a) 广播设备发送基础广播帧和扩展广播帧 b) 发现设备收到可查询扩展广播帧后发送查询请求帧 c) 广播设备接收请求并发送查询响应帧 d) 发现设备接收查询响应帧, 完成发现
- whitelist: nearlink_sdr.mac.access.AccessWhitelist¶
'field(...)'
- on_broadcast_received(frame: nearlink_sdr.mac.broadcast.BroadcastFrame) bool[源代码]¶
处理收到的广播帧。
若帧中包含发现/接入资源配置且为可查询帧, 返回 True 表示可发送查询请求。 白名单启用时仅处理白名单内设备。
- 参数:
frame -- 收到的广播帧。
- 返回:
True 表示可查询, 需要后续发送查询请求。
- build_query_request(target_addr: bytes, filter_info: nearlink_sdr.mac.broadcast.QueryRequestFilterInfo | None = None, upper_layer_data: bytes = b'') nearlink_sdr.mac.broadcast.BroadcastFrame[源代码]¶
构造查询请求帧 (阶段 b)。
- 参数:
target_addr -- 目标广播设备地址。
filter_info -- 查询过滤信息 (按服务UUID过滤)。
upper_layer_data -- 高层广播数据。
- 返回:
查询请求广播帧。
- handle_query_response(frame: nearlink_sdr.mac.broadcast.BroadcastFrame) bool[源代码]¶
处理查询响应帧 (阶段 d)。
- 参数:
frame -- 收到的查询响应帧。
- 返回:
True 表示发现完成。
- handle_query_request(request_frame: nearlink_sdr.mac.broadcast.BroadcastFrame, all_services_data: bytes = b'') nearlink_sdr.mac.broadcast.BroadcastFrame[源代码]¶
处理查询请求并构造查询响应帧 (阶段 c)。
- 参数:
request_frame -- 收到的查询请求帧。
all_services_data -- 本设备支持的所有服务数据。
- 返回:
查询响应广播帧。
- property discovered_devices: dict[bytes, tuple[nearlink_sdr.mac.broadcast.BroadcastFrame, nearlink_sdr.mac.broadcast.BroadcastFrame | None]]¶
返回已发现的设备及其广播帧/查询响应帧。
- class nearlink_sdr.mac.access.InitiatorAccessManager[源代码]¶
接入发起方管理器 (标准 7.1.3 阶段 b/d)。
职责:
解析收到的扩展广播帧
构造接入请求
处理接入响应
完成 GT 角色协商
- config: nearlink_sdr.mac.access.AccessConfig¶
'field(...)'
- link_manager: nearlink_sdr.mac.link_manager.LinkManager¶
'field(...)'
- whitelist: nearlink_sdr.mac.access.AccessWhitelist¶
'field(...)'
- process_ext_adv(frame: nearlink_sdr.mac.broadcast.BroadcastFrame) bool[源代码]¶
处理收到的可接入扩展广播帧 (阶段 b 准备)。
解析发现接入资源配置, 提取请求窗口参数。 白名单启用时, 仅处理白名单中设备的广播帧 (7.1.6)。
- 参数:
frame -- 收到的广播帧。
- 返回:
True 表示帧中包含有效的接入资源配置。
- handle_access_response(response_data: bytes) tuple[nearlink_sdr.mac.link_manager.Role | None, dict[str, Any]][源代码]¶
处理接入响应 (阶段 d)。
- 参数:
response_data -- 接入响应帧完整数据 (BroadcastFrame.pack() 格式)。
- 返回:
(最终角色, 链路参数字典)。角色为 None 表示接入被拒绝。
- property discovery_config: nearlink_sdr.mac.broadcast.DiscoveryAccessResourceConfig | None¶
- property phase: nearlink_sdr.mac.access.AccessPhase¶
- class nearlink_sdr.mac.access.NegotiatedRole[源代码]¶
GT 角色协商结果。
- local_role: nearlink_sdr.mac.link_manager.Role¶
None
- peer_role: nearlink_sdr.mac.link_manager.Role¶
None
- class nearlink_sdr.mac.access.NonConnectedBroadcastManager[源代码]¶
非链接态广播管理器 (标准 7.1.7.2)。
通过携带非链接态广播信息和启动系统管理帧信息的扩展广播帧 建立非链接态广播传输。
- config: nearlink_sdr.mac.access.NonConnectedBroadcastConfig¶
'field(...)'
- build_non_connected_broadcast_frame() nearlink_sdr.mac.broadcast.BroadcastFrame[源代码]¶
构建携带非链接态广播信息的扩展广播帧。
帧中包含两种数据:
UNLINKED_BROADCAST_LINK (0x06): NonLinkedBroadcastLinkInfo
SYSTEM_MGMT_FRAME (0x05): SystemMgmtFrameInfo
- 返回:
构建好的 BroadcastFrame。
- class nearlink_sdr.mac.access.NonConnectedBroadcastResult[源代码]¶
解析非链接态广播帧的结果。
- link_info: nearlink_sdr.mac.broadcast.NonLinkedBroadcastLinkInfo¶
None
- smf_info: nearlink_sdr.mac.broadcast.SystemMgmtFrameInfo¶
None
- nearlink_sdr.mac.access.negotiate_gt_role(broadcaster_pref: int, broadcaster_negotiable: bool, initiator_pref: int, initiator_negotiable: bool) nearlink_sdr.mac.access.NegotiatedRole[源代码]¶
根据标准 7.1.3 执行 GT 角色协商。
双方各表达角色偏好 (0=T节点, 1=G节点) 和可协商标志。 冲突时默认: 发起方→G节点, 广播方→T节点。
- 参数:
broadcaster_pref -- 广播方角色偏好 (0=T, 1=G)。
broadcaster_negotiable -- 广播方角色是否可协商。
initiator_pref -- 发起方 (接入方) 角色偏好。
initiator_negotiable -- 发起方角色是否可协商。
- 返回:
协商结果, 从发起方视角: local_role 为发起方角色。
- nearlink_sdr.mac.access.parse_non_connected_broadcast(frame: nearlink_sdr.mac.broadcast.BroadcastFrame) nearlink_sdr.mac.access.NonConnectedBroadcastResult | None[源代码]¶
解析扩展广播帧中的非链接态广播信息 (7.1.7.2)。
- 参数:
frame -- 收到的扩展广播帧。
- 返回:
解析结果; 若帧中不包含非链接态广播信息则返回 None。
- nearlink_sdr.mac.access.run_access_procedure(broadcaster_addr: bytes = b'\x01\x02\x03\x04\x05\x06', initiator_addr: bytes = b'\n\x0b\x0c\r\x0e\x0f', broadcaster_config: nearlink_sdr.mac.access.AccessConfig | None = None, initiator_config: nearlink_sdr.mac.access.AccessConfig | None = None, broadcaster_use_smf: bool = True) tuple[nearlink_sdr.mac.access.BroadcasterAccessManager, nearlink_sdr.mac.access.InitiatorAccessManager][源代码]¶
执行完整的端到端接入流程 (标准 7.1.3 阶段 a-e)。
用于仿真和集成测试, 不涉及实际射频传输。
- 参数:
broadcaster_addr -- 广播方 MAC 地址。
initiator_addr -- 发起方 MAC 地址。
broadcaster_config -- 广播方配置。
initiator_config -- 发起方配置。
broadcaster_use_smf -- 是否使用系统管理帧模式。
- 返回:
(广播方管理器, 发起方管理器) 二元组, 两者的 link_manager 在成功时均处于 CONNECTED 状态。