lwip双网卡移植问题

2019-12-27 18:53发布

最近用STM32+LWIP,由于同时需要WIFI和RJ45,所有搞了个双网卡驱动,看LWIP好像支持多个网卡比较简单,的确移植过程也很快完了。
测试过后发现有个问题。就是route的问题:由于数据发送的时候查找路由表的时候
  1. struct netif *
  2. ip_route(struct ip_addr *dest)
  3. {
  4.   struct netif *netif;

  5.   /* iterate through netifs */
  6.   for(netif = netif_list; netif != NULL; netif = netif->next) {
  7.     /* network mask matches? */
  8.     if (netif_is_up(netif)) {
  9.       if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) {
  10.         /* return netif on which to forward IP packet */
  11.         return netif;
  12.       }
  13.     }
  14.   }
  15.   if ((netif_default == NULL) || (!netif_is_up(netif_default))) {
  16.     LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to 0x%"X32_F" ", dest->addr));
  17.     IP_STATS_INC(ip.rterr);
  18.     snmp_inc_ipoutnoroutes();
  19.     return NULL;
  20.   }
  21.   /* no matching netif found, use default netif */
  22.   return netif_default;
  23. }
复制代码ip_route使用目的地址作为查找路由表的依据,由此判断该哪个网卡发送数据,如果两个网卡和目的地址在同一个网段。那么数据是从第一个路由表发出。如果两个网卡和目的地址不在同一个网段。数据由默认网卡发出。
我的设备是作为服务器来使用,希望哪张网卡收到数据便由哪张网卡发出。现在这样是有问题的。
现在能想到的办法就是在数据接收的时候给个标志,发送的时候判断这个标志。但个人觉得方法好像有点笨。
不知道各位有没有比较优化的方法来解决这个问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。