【原创】关于xenomai3 RTnet的一点记录
- xenomai3协议栈RTnet支持TCP、UDP,但不支持IGMP;
- 对ARP支持有限制:地址解析的延迟会影响数据包传输延迟,RTnet为实时性考虑,路由表设计静态的,只在设置期间配置,或者接收到其他机器A发出的的ARP请求才会将A的路由信息添加到路由表。如果我们访问的IP是未知目标MAC地址,不会发出解析请求,直接报错。如果我们不能配置路由表,这会影响我们作为客户端去连接服务端时,出现找不到服务端。
- RTnet TCP作为服务端时,每个服务端端口同时只允许一个客户端连接,这算是什么服务端!!!!
- 关于
CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
配置说明:
-
CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
启用时:-
rtproxy 与rtnet设备MAC地址相同
-
RTnet接收的ARP请求由linux接收处理,但rtnet接收到ARP回复会记录到rtroute表中
即若没有启用rtproxy ,无法ping通rtnet的IP
-
linux路由表
-
rtping不能使用,只能使用linux ping
-
linux发送时,直接通过rtnet网卡发送
-
对于每一个IP帧,先检查rtnet是否接收,rtnet不接收才转发给rtproxy ,对于rtnet不支持的ip协议,直接转发
-
-
CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
关闭后:- rtproxy 设备MAC地址为 0:0:0:0:0:0,且不支持ARP(
dev->flags |= IFF_NOARP
),rtproxy 设备不支持组播。 - RTnet接收的ARP请求由RTnet处理并回复
- linux发送时,先查询rtroute,然后修改linux发送的数据包,源MAC修改为rtnet设备的MAC,目的MAC为路由表中获取(缺点是rtroute的路由表是静态的)
- rtproxy 设备MAC地址为 0:0:0:0:0:0,且不支持ARP(
-
TCP/IP本就不是实时的,xenomai3全部用rtnet实现可用性太低,但在实际实时以太网应用中,基本只用到二层实时网络收发,不涉及三层及以上协议,所以xenomai4中evl核中基于linux扩展,实时只支持raw packet是非常正确的做法!
-
在一些应用场合我们需要控制phy,或者读写phy寄存器信息,但rtnet ioctl没有linux的ioctl全面,没有相关接口,这类接口需要自己在socket.c中添加,同时网卡驱动中同步增加。
更多信息参见:https://source.denx.de/Xenomai/xenomai/-/wikis/RTnet_Basics