Wi-Fi Direct (P2P)

支持的芯片[ RTL8730E ][ RTL8721Dx ][ RTL8721F ]

备注

Realtek Wi-Fi P2P 功能只支持带有 wpa_supplicant 的 Linux Host, 包括 Wi-Fi 网卡模式中的 Fat Host (WHC Wi-Fi 配置选项及典型模式) 和 RTL8730E Linux 架构。

Wi-Fi P2P 概述

Wi-Fi Direct,也被称为 Wi-Fi P2P (Wi-Fi Peer-to-Peer),是 Wi-Fi 联盟发布的一种无线通信技术,旨在简化设备间的连接过程,实现快速、方便的无线通信。它允许设备直接相互连接,无需通过传统的 Wi-Fi 接入点(AP),就可以进行点对点通信。这意味着移动中的用户可以从笔记本电脑、智能手机和平板电脑等设备无线打印文档、共享屏幕、共享数据、同步文件和显示信息。

P2P 架构

P2P 架构中定义了三个组件,分别是:

  • P2P Device:

    • 支持 Wi-Fi P2P 协议的设备,如智能手机、平板、笔记本等。

    • 具备发现其他设备、协商连接、加入或创建 P2P Group 的能力。

  • P2P Group Owner(GO):

    • P2P 网络中的“主控”角色,类似于传统 Wi-Fi 网络中的接入点(AP)。

    • GO 负责管理组内设备连接、资源分配和数据转发。

    • 一个 P2P Group 中只能有一个 GO。

  • P2P Group Client(GC):

    • 连接到 GO 的设备,类似于传统 Wi-Fi 网络中的终端设备(STA)。

    • 可以与 GO 进行数据交换,也能与其他 Client 通信(通过 GO 转发)。

    • 一个 P2P Group 可以有多个 Client,形成 1:n 的拓扑结构。

P2P 拓扑

  • 在组建 P2P Group(即 P2P Network)之前,终端都是一个一个的 P2P Device。

  • 当这些 P2P Device 设备之间完成 P2P 协商后,其中将有一个 Device 来扮演 GO 的角色,而其他 Device 扮演 GC 的角色。

  • 由于 GO 的功能类似于 AP,所以周围那些不支持 P2P 功能的 STA 也能发现并关联到 GO。这些 STA 被称之为 Legacy Clients。

最终构成的 P2P Group 拓扑图如下:

../../../_images/p2p_topology.svg

P2P Group 拓扑结构

P2P 并发操作

  • 一个 P2P 设备可以与 WLAN 同时运行。这样的设备被称为 P2P 并发设备。下图展示了一个 P2P 并发设备,其中一个 MAC 实体作为 WLAN-STA 运行,另一个 MAC 实体作为 P2P 设备运行。

../../../_images/p2p_concurrent_device.svg

P2P Concurrent Device

P2P 实现过程

P2P 的实现过程主要包括设备发现、服务发现、组网协商、安全配置、建立连接与数据传输等:

  • 设备发现(Device Discovery):

    • 设备通过发送和监听 Probe Request/Response 帧,在社交信道(如 1、6、11)上发现彼此。

  • 服务发现(Service Discovery):

    • 可选阶段,用于查询对方是否支持特定服务。

  • 组建群组(Group Formation):

    • GO Negotiation:通过 GO Negotiation 协议,两个设备协商决定谁成为 Group Owner。

    • Provisioning:协商连接方式并完成安全认证,确保通信加密。

  • 连接建立与数据传输:

    • 一旦连接成功,GO 分配 IP 地址,Client 加入网络。设备之间可通过 TCP/IP 协议进行数据交换。

Wi-Fi P2P 特性支持

Realtek 设备对 Wi-Fi P2P 协议提供了如下支持:

  • 核心功能支持

    • 支持 GO。

    • 支持 GC。

    • 支持 GO + STA。

  • P2P 安全性支持

    • 连接建立前,通过 WPS (PIN 或 Push Button)协议进行认证。

    • 连接建立前后,使用 WPA2 加密通信数据。

Wi-Fi P2P 移植指南

Realtek Wi-Fi P2P 功能支持 Linux Host, Wi-Fi 网卡模式 S2H (WHC Wi-Fi 配置选项及典型模式), 或 RTL8730E Linux。

Device 驱动移植参考 Wi-Fi 网卡模式 配置选项及典型模式,Host 驱动移植参考 Wi-Fi 网卡模式 驱动移植 中 Linux 部分。

Wi-Fi P2P 使用指南

P2P 测试使用标准的 wpa_supplicant 和 wpa_cli 命令

下面是一个基本的组网协商建立 p2p 连接的例子(测试用到两块 RTL8730E):

DUT

SUT

NOTE

wpa_supplicant -i wlan0 -c {path}/wpa_supplicant.conf -B

path可以是任意目录,wpa_supplicant.conf 编辑的内容如下所示:

ctrl_interface=/var/run/wap_supplicant

update_config=1

device_name=P2P_Device_1

manufacturer=Realtek

model_name=RTW_STA

model_number=WLAN_CU

serial_number=12345

device_type=1-0050F204-1

os_version=01020300

config_methods=virtual_display virtual_push_button keypad display push_button

wpa_supplicant -i wlan0 -c {path}/wpa_supplicant.conf -B

wpa_supplicant.conf 除 device_name 以外,其他均与上面保持一致:

device_name=P2P_Device_2

wpa_cli -i wlan0

wpa_cli -i wlan0

p2p_find

p2p_find

p2p_peers

p2p_peers 可以把扫到的 p2p device 全部打印出来,包括 mac address

p2p_peers

p2p_connect 00:e0:4c:00:06:fb pbc go_intent=15

指定对方的 mac address 进行连线,连线成功后,DUT 当 GO,SUT 当 GC

p2p_connect 00:e0:4c:00:06:f9 pbc go_intent=0

q

ifconfig 可以发现 GO 端有新增一个 p2p-wlan0-0 的接口

ifconfig

ifconfig p2p-wlan0-0 192.168.43.1

在 GO 端起 dhcp server(将 udhcpd.conf 的 interface 改成 p2p-wlan0-0)

udhcpd -S /etc/udhcpd.conf

q

ifconfig 可以发现 GC 端有新增一个 p2p-wlan0-0 的接口

ifconfig

dhcpcd p2p-wlan0-0

DUT获取IP,ping test

ping 192.168.43.1 -c 10