lwip双网卡移植的问题,以及特殊解决方法。

本文档详细介绍了在产品中移植LWIP轻量级TCP/IP协议栈,从单网卡到双网卡的过程中遇到的问题,包括MAC地址设置、数据包处理、路由选择等,并提供了解决方案,如修改ip_route()函数来适应同一网段的双网卡配置。
摘要由CSDN通过智能技术生成
 

 我公司产品是双网口,原来的程序是自己写的TCP/IP协议栈,因为只是简单实现了ARP和TCP、UDP的最简单情况,所以有时候在公网上会遇到问题。

后来在单网口的产品中移植了LWIP,轻量级TCP/IP协议栈,觉得一定程度上解决了问题,所以双网卡的产品也要用LWIP这个协议栈来实现。这个工作就落到了我的头上。

单网卡的移植我不赘述,只描述从单网卡向双网卡移植过程中遇到的问题以及解决方法。

首先,我看了下单网卡移植中所作的改动。

  • 硬件启动时初始化硬件,调用my_lwip_init(),这个函数中创建任务,添加网卡配置。
  • low_level_init()函数中设置本网卡初始化时MAC地址的设置。
  • low_level_output()函数处理输出信息。
  • low_level_input()函数处理输入信息。
  • ethernetif_input()函数是区分接受到的数据包怎么处理。

由此,可以知道我所需要做的主要改动就是针对这几个函数,及其相关的函数。

  1. 多创建一个netif块,硬件初始化时在mylwip_init()函数中多添加一个netif_add,并调用netif_set_up().
  2. 在low_level_init()中,区分两个网卡的MAC地址并且填充到netif块中。[由此代码可见,硬件mac地址修改后程序必须重新设置netif链表才能正确执行。]
  3. 在low_level_output()中,判断返回的数据是要发送到哪个网卡,将数据拷贝到网卡发送缓冲区,然后发送。
  4. 在low_level_input()中,判断是哪个网卡接受到了数据,并将网卡接受缓冲区中的数据拷贝到netif块的payload数据处。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值