最近用STM32+LWIP,由于同时需要WIFI和RJ45,所有搞了个双网卡驱动,看LWIP好像支持多个网卡比较简单,的确移植过程也很快完了。
测试过后发现有个问题。就是route的问题:由于数据发送的时候查找路由表的时候
- struct netif *
- ip_route(struct ip_addr *dest)
- {
- struct netif *netif;
- /* iterate through netifs */
- for(netif = netif_list; netif != NULL; netif = netif->next) {
- /* network mask matches? */
- if (netif_is_up(netif)) {
- if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) {
- /* return netif on which to forward IP packet */
- return netif;
- }
- }
- }
- if ((netif_default == NULL) || (!netif_is_up(netif_default))) {
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to 0x%"X32_F"
", dest->addr));
- IP_STATS_INC(ip.rterr);
- snmp_inc_ipoutnoroutes();
- return NULL;
- }
- /* no matching netif found, use default netif */
- return netif_default;
- }
复制代码ip_route使用目的地址作为查找路由表的依据,由此判断该哪个网卡发送数据,如果两个网卡和目的地址在同一个网段。那么数据是从第一个路由表发出。如果两个网卡和目的地址不在同一个网段。数据由默认网卡发出。
我的设备是作为服务器来使用,希望哪张网卡收到数据便由哪张网卡发出。现在这样是有问题的。
现在能想到的办法就是在数据接收的时候给个标志,发送的时候判断这个标志。但个人觉得方法好像有点笨。
不知道各位有没有比较优化的方法来解决这个问题。
一周热门 更多>