记录TSN网关:型号RELY-TSN-BRIDGE。测试一些TSN协议时遇到的可能会存在共性的问题。希望能够对各位有一些帮助。
VLAN
开始打算做一些测试的时候,我已经对TSN协议和网关的使用有一定熟悉,但对以太网协议还不是很熟悉。好在TSN协议多数都在数据链路层运行,不熟悉高层协议影响不是特别大。
第一步想到的就是我需要电脑能够发出TSN能够处理的数据,也就是携带VLAN tag。
- WINDOWS系统
经过一些尝试,最后没有选择在熟悉的windows上进行。WINDOWS确实有支持VLAN tag。下面是我的网卡设置,系统是WINDOWS10:
在使用VLAN和优先级,然后设置好VLAN ID后,windows系统可以支持VLAN,但是我用的抓包工具Wireshark无法抓到VLAN tag的内容,试了很多方法也没找到可行的。因为我必须要在抓包时能够显示里面的优先级,所以这个方案无法满足。如果windows取消VLAN支持,那么Wireshark可以抓到VLAN tag,但是windows不会自动回复ARP。这样来看windows在实际测试的时候不如linux系统灵活。
除此之外,我也发现linux上面有很多现成库的支持,所以即使只是想做一些简单的测试,linux也是一个更好的选择。
- linux系统
测试用的是ubuntu20.04,查找配置相关的指令花了一些时间,发送数据和抓包都可以满足要求。配置指令如下:
安装VLAN模块:
apt install vlan
modprobe 8021q
启用VLAN(使用vconfig指令时提示应该用更新的iproute2,所以我没有用vcconfig):
ip link add link eth0 name eth0.5 type vlan id 5 egress-qos-map 2:2 3:3
ip addr add 192.168.100.1/24 dev eth0.5 brd +
ip link set eth0.5 up
查看指令:
ip link show
ip addr show
删除:
ip link delete eth0.5 type vlan
其中egress-qos-map 2:2 3:3是启用VLAN tag中的优先级标识和socket中的参数SO_PRIORITY之间的映射,映射之后修改这个参数就可以发出带有优先级的以太网数据了。
uint proiority = 3;
setsockopt(m_socket, SOL_SOCKET, SO_PRIORITY, &priority, sizeof(priority));
关于Qbv的小测试
简单做一个关于Qbv的测试,网关配置如下:
发送数据是优先级3,5连续并循环。不激活Qbv功能时,接收如下:
激活后:
在单独一个优先级的时间片上很容易看到结果;在3和5同时打开的时间片,发现通道是按照FIFO规则的,网关会优先转发上一个时间片没有转发的优先级为5的数据,然后才会恢复3,5,3,5这样转发情况。