Linux TUN/TAP 使用心得
最近开发AutoSAR项目,有关于TcpIp模块的开发与测试,由于硬件原因没有足够的硬件可供调试,故选择了Linux下 TUN/TAP 模块进行调试。其优点是可以让我放心的调试驱动层以上的代码,而不用区关心驱动是否会有问题。(题外话,据说Linux可以模拟虚拟的Can设备,有时间会试一试)
该设备的原理等说明不会在这里详细的介绍了,毕竟网上一搜一大堆。只介绍一下使用过程中应该注意的点: a. 在使用时可以选择使用select函数进行数据的获取也可以选择read函数进行数据获取。具体情况具体分析,但是基于这样一个原则进行,如果所有的代码都是使用不同的线程运行则建议使用select函数进行数据获取。如果单线程则使用read函数获取数据即可。 b. 在设置TapIP地址时,需要设置是网关地址(IPv4),TcpIp内核使用的IP地址与Tap使用的IP地址不是一样的,但是要求在一个网段,这样可以实现报文的收发。
示例代码:
打开并设置使用的是TAP还是TUN。
EthIf_Fd
[ethifIdx
] = open(DEVTAP
, O_RDWR