你好,
我正在尝试使用不同的 struct netif 逻辑接口将多个 IP 地址绑定到单个以太网端口。我目前的实现方法是禁用其中一个接口才能使其正常工作。
寻求有关正确方法的指导或资源。任何见解都非常感谢。
谢谢!
int main ( void ) {
struct netif netif1 , netif2 ;
int ret ;
ip4_addr_t netif1_ipaddr 、 netif1_netmask 、 netif1_gw ;
ip4_addr_t netif2_ipaddr 、 netif2_netmask 、 netif2_gw ;
ethernetif_config_t enet_config = { . phyHandle = & phyHandle ,
.phyAddr = EXAMPLE_PHY_ADDRESS ,
.phyOps = EXAMPLE_PHY_OPS ,
.phyResource = EXAMPLE_PHY_RESOURCE ,
} ;
BOARD_ConfigMPU () ;
BOARD_InitPins () ;
BOARD_BootClockRUN () ;
BOARD_InitDebugConsole () ;
BOARD_InitModuleClock () ;
SCB_DisableDCache () ;
IOMUXC_SelectENETClock () ;
BOARD_InitBothEnetPins_test () ;
BOARD_ENET_PHY1_RESET ;
启用IRQ ( ENET_1G_MAC0_Tx_Rx_1_IRQn ) ;
启用IRQ ( ENET_1G_MAC0_Tx_Rx_2_IRQn ) ;
MDIO_Init () ;
g_phy_resource.read = MDIO_Read ;
g_phy_resource.write = MDIO_Write ;
time_init () ;
CRYPTO_InitHardware () ;
lwip_init () ;
// 添加第一个逻辑接口及其 IP 配置
IP4_ADDR ( & netif1_ipaddr , 192,168,0,102 ) ;
IP4_ADDR ( & netif1_netmask , 255 , 255 , 255 , 0 ) ;
IP4_ADDR ( & netif1_gw , 192,168,0,100 ) ;
netif_add ( & netif1 , & netif1_ipaddr , & netif1_netmask , & netif1_gw , & enet_config , EXAMPLE_NETIF_INIT_FN , ethernet_input ) ;
netif_set_default ( & netif1 ) ;
netif_set_up ( & netif1 ) ;
// 添加第二个逻辑接口及其 IP 配置
IP4_ADDR ( & netif2_ipaddr , 192,168,0,111 ) ;
IP4_ADDR ( & netif2_netmask , 255 , 255 , 255 , 0 ) ;
IP4_ADDR ( & netif2_gw , 192,168,0,100 ) ;
netif_add ( & netif2 , & netif2_ipaddr , & netif2_netmask , & netif2_gw , & enet_config , EXAMPLE_NETIF_INIT_FN , ethernet_input ) ;
netif_set_up ( & netif2 ) ;
while ( 1 ) {
// 轮询两个网络接口以获取传入帧
ethernetif_input ( & netif1 ) ;
ethernetif_input ( & netif2 ) ;
sys_check_timeouts () ; // 处理所有核心协议的系统超时
}
返回-1 ;
}
在 LWIP 中,将多个 IP 地址映射到单个以太网接口,对于需要通过一个物理连接处理不同网络身份或服务的系统来说非常有用。关键在于确保 IP 配置、路由和 ARP 处理得到正确管理,以便每个地址都能正确响应而不会发生冲突。在设计嵌入式网络解决方案时,了解可用的硬件选项并探索支持灵活网络设置和可靠通信的网络产品也很有帮助。使用不同的网络场景进行适当的测试有助于发现与数据包处理和接口配置相关的问题。
您好,您发布这个问题已经有一段时间了,请问您找到解决方法了吗?
我目前正在使用TI TMS570LC43 Launchpad和lwIP 1.4.1版本尝试同样的操作。