2020-09-03

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);
        TCPIP_DEBUG_LOG("EthIf_Fd[%d] = %d\r\n", ethifIdx, EthIf_Fd[ethifIdx]);
        if (EthIf_Fd[ethifIdx] == -1)
        {
   
            perror("EthIf_Init: Try running \"modprobe tun\" or rebuilding your kernel with CONFIG_TUN; cannot open " DEVTAP);
            exit(1);
        }
        memset(&ifr, 0, sizeof(ifr));

        strncpy(ifr.ifr_name, devTapName, sizeof(ifr.ifr_name));
        memcpy(&commond[0], ETHIF_SET_NET_UP, sizeof(ETHIF_SET_NET_UP));
        offset += sizeof(ETHIF_SET_NET_UP) - 1;
        memcpy(&commond[offset], devTapName, sizeof(devTapName));
        offset += sizeof(devTapName) - 1;
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值