主要内容

通过以太网收发块应用802.1Q VLAN Tag

此示例显示如何使用以太网块在目标计算机上发送和接收以太网数据包。

在开发计算机上,UDP Send块发送一个样例包。在目标计算机上,此包由以太网接收块接收,有效载荷中的单个字节被操作,最终的有效载荷由以太网发送块发送出目标计算机。

以太网块只在目标计算机上工作。

这些块可以在默认信号输入/输出模式和消息输入/输出模式下工作。本例中显示了两种模式。

设置以太网发送-接收模型

打开目标模型slrt_ex_ethernetSendReceive

mdl1 =“slrt_ex_ethernetSendReceive”;open_system (fullfile (matlabroot,“工具箱”“slrealtime”“例子”mdl1));

目标模型需要一个有效的接口名称参数值在两个接收块和两个发送块中。您可以通过使用QNX中微子RTOS在目标计算机上获取这些信息ifconfig命令。

本例使用接口名称wm0为目标IP地址“192.168.7.5”。

输入接口名称wm0模型中的四个块:

targetIface =“wm0”;set_param (“slrt_ex_ethernetSendReceive /以太网接收”“InterfaceName”set_param(“slrt_ex_ethernetSendReceive /以太网Receive1”“InterfaceName”set_param(“slrt_ex_ethernetSendReceive /以太网发送”“InterfaceName”set_param(“slrt_ex_ethernetSendReceive /以太网Send1”“InterfaceName”targetIface)

以太网收发实时应用中的操作

从开发计算机发送到目标计算机的每个包都由目标上的每个Ethernet Receive块接收。

两个Receive和相应的Send块演示了信号模式和消息模式下的操作,其中Simulink消息表示包。

在信号模式下,'slrt_ex_ethernetSendReceive/Subsystem '使用Simulink块添加802.1Q VLAN tag 32,并将其发送回主机的端口加1。如果原发送端端口为8001,则loopback目的端口为8002。

在消息模式下,slrt_ex_ethernetSendReceive/MATLAB系统对象接收报文。然后,它为每个数据包创建三个VLAN标记为24、25和26的新数据包。

操作以太网报头

以太网报头的具体结构请参见IEEE 802.1Q标准文档。

IPv4报文头的详细描述请参见《Internet协议》中的RFC 791https://datatracker.ietf.org/doc/html/rfc791

对标头的这些更改发生在子系统系统对象:

  1. 源、目的MAC地址交换:1 ~ 6字节与7 ~ 12字节交换。

  2. 交换源IP地址和目的IP地址:交换字节27-30和字节31-34。

  3. 交换源和目的端口号:交换字节35 ~ 36,交换字节37 ~ 38。

  4. 新的目的端口号加1:38字节的值加1。

  5. 禁用校验和校验:将“字节41-42”设置为“0”。如果没有这个更改,发送回开发计算机的包将被丢弃,因为校验和值将是不正确的。有关校验和验证的详细信息,包括重新计算新的校验和,请参阅RFC: 791 For Internet Protocol。

  6. 添加802.1Q VLAN tag: IEEE 802.1Q在以太网帧的源/目的MAC地址和长度/类型字段之间添加一个4字节的VLAN tag,用于标识该帧所属的VLAN。

对于VLAN tag:

  1. 通过向右移动字节13到从17开始的字节位置4来为VLAN标记腾出空间。

  2. 在13-16字节位置插入VLAN标签。例如,添加标签24,插入0x81 0x00 0x00 0x18 .使用实例.这里的前两个字节对应于标记协议标识符(TPID),这是一个16位字段,设置为0x8100,以标识该帧为IEEE 802.1 q标记的帧。另外两个字节设置Tag控制信息(TCI)为0x0018,其中包括对应24的VLAN Identifier。

在开发计算机上打开并建立包源模型

开放模式slrt_ex_udpsend.配置IP地址。

developmentIP =“192.168.7.2”;mdl2 =“slrt_ex_udpsend”;open_system (fullfile (matlabroot,“工具箱”“slrealtime”“例子”mdl2));set_param (“slrt_ex_udpsend / UDP Receive1”“ipAddress”developmentIP)

该模型使用UDP块在执行时间为2秒时发送一个数据包。

设置到IP地址参数slrt_ex_udpsend / SendPacketSubsystem / UDP发送到目标计算机的IP地址。

targetIP =“192.168.7.5”;set_param (“slrt_ex_udpsend / SendPacketSubsystem / UDP发送”“解决”targetIP)

在目标计算机上运行以太网发送-接收实时应用程序

方法在目标上运行目标模型运行在目标上按钮。或者,在MATLAB命令窗口中输入:

evalc (“slbuild (mdl1)”);Tg = slrealtime;负载(tg、mdl1)开始(tg)

在开发计算机上模拟UDP发送模型

模拟模型。

set_param (“slrt_ex_udpsend”“SimulationCommand”“开始”

打开Simulink数据检查器

打开“模拟数据检查器”并观察在目标计算机上创建的新数据包。在MATLAB命令窗口中输入:

Simulink.sdi.view;

仿真数据检查器显示UDP Receive块通过四个数据长度改变为5 (UDP包大小)的实例接收了四个数据包。

每个模拟在时间= 2秒时只发送一个数据包。

以太网发送-接收实时应用程序响应四个数据包,这些数据包包含相同的负载,但是VLAN标记为24、25、26和32。

Windows不向应用程序公开VLAN标记。因此,使用包捕获程序(如Wireshark)不会显示VLAN标签。

开发计算机模型显示收到了四个UDP数据包。这些是UDP块,不输出以太网报头信息。

对于具有阻断VLAN标记的连接的Windows系统(例如虚拟机以太网连接或开发计算机和目标计算机之间的网络接口),这些连接可能会阻止数据包出现在输出显示中。

一种查看标签的方法是使用QNX中微子RTOStcpdump命令在以用户身份登录时在目标计算机上执行使用密码.使用命令:

tcpdump -i  -v -e vlan

targetIface,使用接口名称wm0设置以太网发送-接收模型部分。

关闭模式

bdclose (“所有”);
Baidu
map