硬汉嵌入式论坛

 找回密码
 立即注册
查看: 711|回复: 9
收起左侧

[NetX] 实现一个ETH网口绑定两个IP地址

[复制链接]

14

主题

91

回帖

153

积分

初级会员

积分
153
发表于 2025-8-28 23:01:31 | 显示全部楼层 |阅读模式
主要思路是:
   在一个网口上创建两个网卡,绑定不同的地址,使用同一个驱动程序,在驱动中将数据包复制绑定不同的网卡。

NetX源码中数据包是与网卡绑定的,协议栈处理数据包时会使用接收此数据包的网卡的地址做判断。
但是单网口情况下,你无法判断收到的这帧数据包究竟是打算给地址1还是地址2的。

可以将数据包复制一份,分别以网卡1(IP地址1)、网卡2(IP地址2)的名义传递给NetX协议栈做处理。
优点是完全不修改源码。
缺点是接收速率减半。


改动主要体现在驱动程序里的_nx_driver_transfer_to_netx函数。
屏幕截图 2025-08-28 223524.png

其他需要注意的地方就是:
- NX_MAX_PHYSICAL_INTERFACES要设置为2
- 同一个网口上两个网卡绑定时要避免重复初始化
- 正确维护两个网卡的nx_interface_link_up状态等。


测试:
在我的H743开发板上,ETH绑定了192.168.3.100及192.168.0.3两个IP地址,
开了一个modbus-tcp服务器,
在局域网内位于3段及0段的两台电脑上,均成功连接并读写寄存器。

以下附上STM32H743上的ETH驱动文件及NetX应用层初始化文件。


netx_eth_multi_ip_addr.rar

14.5 KB, 阅读权限: 100, 下载次数: 12

评分

参与人数 2金币 +120 收起 理由
王海靖 + 20
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
发表于 2025-8-29 08:00:36 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

3

主题

20

回帖

29

积分

新手上路

积分
29
发表于 2025-9-2 12:15:43 | 显示全部楼层
为什么 会有这样的 需求呢??
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
发表于 2025-9-28 09:21:39 | 显示全部楼层
本帖最后由 hpdell 于 2025-9-28 09:24 编辑

这个牛鼻呀, 有空我也捣鼓一下看看


问一下, 你这个驱动在一个 ip 段 能否实现 2 个网口正常工作呀 ?

如:   192.168.1.20   6059   ,    192.168.1.23    6069   ?   他们的的端口 各自独立  这样能否实现啦  ?
回复

使用道具 举报

1

主题

80

回帖

83

积分

初级会员

积分
83
发表于 2025-9-28 10:54:53 来自手机 | 显示全部楼层
2025 年了,应该上 ipv6 了,ipv6 一个网络接口默认支持多个 ip 地址
回复

使用道具 举报

0

主题

24

回帖

24

积分

新手上路

积分
24
发表于 2025-9-28 15:23:04 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

14

主题

91

回帖

153

积分

初级会员

积分
153
 楼主| 发表于 2025-9-30 14:18:18 | 显示全部楼层
hpdell 发表于 2025-9-28 09:21
这个牛鼻呀, 有空我也捣鼓一下看看

两个网口是指什么?STM32只有一个MAC,仅支持一个网口。想要第二个网口就需要带MAC的芯片,那就肯定用不了这个驱动。如果是单网口 双IP IP在同一个网段,那应该可以直接用
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
发表于 2025-9-30 14:37:25 | 显示全部楼层
egoistaw 发表于 2025-9-30 14:18
两个网口是指什么?STM32只有一个MAC,仅支持一个网口。想要第二个网口就需要带MAC的芯片,那就肯定用不 ...

我想一个网口使用 lan8742  rmii 接口, 另外一个使用 dm9000 fmc 接口这个芯片貌似是自带 mac 的, 只要设置一下 mac 地址让他们不同就可以了吧,  
回复

使用道具 举报

14

主题

91

回帖

153

积分

初级会员

积分
153
 楼主| 发表于 2025-9-30 15:00:57 | 显示全部楼层
hpdell 发表于 2025-9-30 14:37
我想一个网口使用 lan8742  rmii 接口, 另外一个使用 dm9000 fmc 接口这个芯片貌似是自带 mac 的, 只要 ...

这样的话,就简单多了,不必用我这个驱动。只需要一个普通的stm32_eth驱动和一个另写的dm9000_fmc驱动程序。调用nx_ip_create时绑一个驱动及IP地址到主网卡,之后再调用nx_ip_interface_attach绑另一个驱动和IP地址到副网卡。
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
发表于 2025-9-30 17:22:03 | 显示全部楼层
egoistaw 发表于 2025-9-30 15:00
这样的话,就简单多了,不必用我这个驱动。只需要一个普通的stm32_eth驱动和一个另写的dm9000_fmc驱动程 ...

好的, 我捣鼓一下看看, 不懂再向你请教  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-21 23:55 , Processed in 0.049507 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表