当前位置: 首页 > news >正文

USB接口虚拟网卡

1 基本概念
1.1 USB转以太网
- ASIX
4-byte length header before every ethernet packet.
- Microchip LAN7800
128x32 bit Descriptor RAM, 32 bits DP_DATA address offset 030h for Descriptor RAM access.
- Windows CMD参数格式:
route /?   -> Linux -h
getmac /V  -> Linux -V
- Windows CMD: ping ip -l 1024 -w timeout, timeout unit: milliseconds
- Windows SocketTool
- Linux TCP Server: busybox nc -lvz -s 192.168.0.10 -p 8001

1.2 SR9900
USB网卡SR9900使用外接的SPI Flash模拟成CDROM。

1.3 RT3070 USB PDMA
1)CAST 8051 and USB core come from Poland Evatronix SA (OTG 3.0 spec), Evatronix SA was acquired by Cadence in 2013.
2)MT7620中的WiFi模块和CAST CUSB2来自于RT3070,并且保持了同样的寄存器映射。
3)CUSB2中的PDMA(Packet DMA)硬件上支持Bulk Out WiFi报文聚合加速。
4)集成了8051单片机。

2 ECM
- 驱动文件路径drivers/net/usb/cdc_ether.c;
- 包含MAC头,需要MAC地址,由eth_random_addr(u8 *addr)产生;
- ECM虚拟网卡host和device端的MAC地址,都由device端生成,并且host_mac通过USB字符串描述符(字符串索引是iMACAddress)传给host;
- 传输的是纯粹的以太网包,一次USB传输只包含一个以太网帧。

3 EEM
- 包含MAC头,需要MAC地址,由eth_random_addr(u8 *addr)产生;
- 每个EEM报文有2个字节的EEM报头,每个EEM报文只包含一个以太网帧;报头由代码中的wrap()和unwrap()处理。

4 MBIM
- 不包含MAC头,Raw IP mode。

5 NCM
- 包含MAC头,需要MAC地址,由eth_random_addr(u8 *addr)产生;
- NCM虚拟网卡host和device端的MAC地址,都由device端生成,并且host_mac通过USB字符串描述符(字符串索引是iMACAddress)传给host;
- 每个NCM报文有12个字节的NCM报头和不定长的NDP报头,每个NCM报文可以包含多个以太网帧,这种特性称为报文聚合,即调用一次URB可以发送或者接收多个IP报文。报头由代码中的wrap()和unwrap()处理。

6 RNDIS
- 包含MAC头,需要MAC地址,由eth_random_addr(u8 *addr)产生;
- RNDIS虚拟网卡host和device端的MAC地址,都由device端生成,并且host_mac通过控制传输传给host;
- 每个RNDIS报文有RNDIS报头,每个RNDIS报文可以包含多个以太网帧(MaxPacketsPerTransfer),这种特性称为报文聚合,即调用一次URB可以发送或者接收多个IP报文。

7 RMNET
7.1 RMNET
- 不包含MAC头,Raw IP mode;
- device端MAC地址由eth_random_addr(u8 *addr)产生;host端的MAC地址由host端驱动指定;
- 每个RMNET报文有RMNET报头,每个RMNET报文可以包含多个以太网帧,这种特性称为报文聚合,即调用一次URB可以发送或者接收多个IP报文。

7.2 IPA
ETH_P_MAP: 0x00F9, Qualcomm multiplexing and aggregation protocol

8 debug
8.1 QMI dial-up
1) Legacy: AT/DUN
2) New: QMI/RmNet

SEND_ENCAPSULATED_COMMAND
GET_ENCAPSULATED_RESPONSE
RESPONSE_AVAILABLE

GitHub - sensiki/quectel-cm
Wireshark QMI dissector
https://github.com/dnlplm/WiresharkQMIDissector

8.2 QCSuper
https://github.com/P1sec/QCSuper

8.3 Windows CMD方式配置IP地址
:: netsh: Network Shell
@echo off
if [%1] == [] (
    echo "Usage:"
    echo "WIN_IP.bat static"
    echo "WIN_IP.bat dhcp"
    echo "WIN_IP.bat speed"
    goto :EOF
)
if %1 == static (
    call :static_ip
) else if %1 == dhcp (
    call :dhcp_ip
) else if %1 == speed (
    call :nic_speed
)
goto :EOF
:: get interface name, use the following command
:: getmac /V /FO LIST

:static_ip
set name="Ethernet"
set ip=192.168.0.100
set mask=255.255.255.0
:: gwmetric=1
echo "setting static ip address..."
netsh interface ipv4 set address %name% static %ip% %mask% none 1
:: netsh interface ipv4 set dns %name% static 114.114.114.114
:: netsh interface ipv4 add dns %name% 8.8.8.8
goto :EOF

:dhcp_ip
set name="Ethernet"
echo "setting dhcp..."
netsh interface ipv4 set address %name% dhcp
netsh interface ipv4 set dns %name% dhcp
goto :EOF

:nic_speed
wmic NIC where NetEnabled=true get Name, Speed

9 Abbreviations
DAD:IPv6 Duplicate Address Detection for CarPlay
GSI: Generic Software Interface, which replaced BAM
OIDs: Object Identifiers
PVID:Port default VID,PVID属于IEEE 802.1Q,不属于Port-based VLAN
RmNet: Remote Network
S2C: System to Chip
wmic: Windows Management Instrumentation Command-line
x86 OTG:APL (Gen9) 8-port MPH xHCI和dwc3组成一个PCI多功能设备,xHCI的func号为0,dwc3的func号为1

http://www.lryc.cn/news/18950.html

相关文章:

  • 基于SpringBoot的外卖项目的优化
  • Ubuntu20.04/22.04 ESP32 命令行开发环境配置
  • Kali Linux使用Metasploit生成木马入侵安卓系统
  • 数据库复习1
  • 18. linux系统基础
  • ssh远程登录报错:kex_exchange_identification: Connection closed by remote host
  • Quartus II 的入门级使用
  • Java EE|TCP/IP协议栈之TCP协议工作机制上
  • 智能化人机协作 遮挡情况下准确识别目标信息
  • React(一):初识React、类组件、jsx的基础语法
  • 2023-2-24 刷题情况
  • 测试员拿到新项目怎么着手测试?不要慌,照做准没错
  • 通过cfssl自签证书https证书
  • openEuler部署Ceph集群(块存储)
  • npm install vue2-ace-editor 安装报错
  • 【PyQt5图形界面编程(2)】:创建工程
  • ansible实战应用系列教程9:管理inclusions
  • MyBatis学习笔记(五) —— MyBatis获取参数值的两种方式
  • go module构建项目
  • 已经准备上千道软件测试面试题了,建议大家收藏!!!还有视频详解!
  • C++设计模式(19)——访问者模式
  • ChatGPT 的工作原理:机器人背后的模型
  • FreeRTOS入门(04):中断、内存、追踪与调试
  • 【C语言】带你彻底理解指针(1)
  • C/C++ 中 JSON 库的使用 (CJSON/nlohmann)
  • 【Opencv项目实战】目标检测:自动检测出现的所有动态目标
  • 活动报名:Tapdata Cloud V3 最新功能全解与核心应用场景演示
  • 人工智能AI威武,爱也……恨也……
  • SpringBoot-基础篇
  • Tapdata Connector 实用指南:实时数仓场景之数据实时同步至 ClickHouse