This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2634-Q1:具有相同 IP 地址的双 Mac 模式以太网

Guru**** 2894990 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1642864/am2634-q1-dual-mac-mode-ethernet-with-same-ip-address

器件型号: AM2634-Q1

您好、

我有特定于项目的要求。

以太网的两个端口将分配相同的 IP 地址和相同的子网掩码、但在不同的网络中。 用例规定两者都应使用 DHCP 获取 IP 地址。 始终只有一个端口通信。 当状态/链路出现故障或因任何原因而关闭时、将使用第二个端口。 第二个端口应立即恢复。  当第一个端口再次启动时、它应恢复通信。

由于两个原因、我在开关模式下未处理此问题。 第一个原因是两个端口上的通信同时处于活动状态。 其次、当端口 1 电缆断开连接时、整个通信停止。

我的问题是、在第 1 个端口再次启动之前、我们如何处理使第 2 个端口处于非活动状态? 这在“交换机“模式或“仅 MAC “模式下是否可行?

此致

Varma

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Varma:

    这是应该在应用级别在双 Mac 模式下实现的。 驱动程序将为两个端口提供端口链路状态回调。 您必须实施一种机制来检查链路活动、假设您在端口 1 断开时收到链路断开事件、然后切换到端口 2。 两个端口都打开时、手动禁用端口 2、  

    我仍然建议不要在两个端口上同时保持相同的 IP 活动状态。 仅当另一个端口关闭时才分配 IP。 一次只保留 1 个字词处于活动状态。 您可以使用 netif_remove() 并将其作为活动的 netif 删除、或在初始化流中删除、而不是添加其他 netif、并且只能在第一个 netif 关闭时添加它。

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Shaunak:

    我必须允许两个端口都执行 DHCP 来获取 IP 地址、以便客户端的控制器知道这两个端口都可用。 我只需要在上电时执行一次该操作。 按照您的建议、如果我将网络设置为已关闭或删除、那么在稍后启用端口时、我是否需要通过另一个 DHCP 启动?

    此致

    Varma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Varma:

    同一设备上的 NetIF 不能有重复的 IP 地址。 在一个实例中,只有一个 netif 可以有一个 IP 地址“x“,如果您尝试在两个 netif 之间共享它,则数据路径可能会损坏,您可能会看到意外的问题。

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Shaunak:

    我明白了你的观点。 我问我们是否要在最初将另一个端口设置为关闭、当我们再次设置时、我们是否需要再次启动 DHCP?  

    顺便说一下、当我启用两个端口时、它们都执行 DHCP 并获取相同的 IP 地址。 但我不打算同时使用它们。

    此致

    Varma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Shaunak:

    我请求您的帮助。 您是否可以布局序列 来删除和重新添加线程?  

    我使用的是裸机。 我已经开发了代码来使用两个 netifs 与 DHCP、UDP 客户端与裸机。

    此致

    Varma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Varma:

    为了避免 ARP 模糊、路由问题、重复的 IP 广播、您必须修改代码以:

    1.确保启动时仅初始化 1 个 NetIF、即使两个端口都可用。 因此、检查端口 1 链路是否正常、然后激活 netif、如果没有激活端口 2 netif。 即使不同时使用、我也会说避免两个 NetIF 都处于活动状态并分配了相同的 IP 地址。 因此只在启动时打开一个节点。

    因此、在初始化期间、只能为 1 个 NetIF 调用 nettif_add()、nettif_set_default()、nettif_set_up() 等、而在主 NetIF 的链接断开事件期间、则只能为其他 NetIF 调用 nettif_set_default() 等。

    2.在链路断开事件期间,在回调函数中,检查哪个网络中断,然后启动另一个网络,这将涉及从 DHCP 服务器再次获取 IP 地址(除非使用静态硬编码 IP )

    您可以遵循 SDK 示例显示的完全相同的流程、但确保一次只处理一个 NetIF、因为您要共享相同的 IP 地址。

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Shaunak。

    感谢您的意见

    下面的顺序对我有效。

    1.在获得 LWIP 初始化和 IP 后、使用 netif_set_link_down(port2_netif ) 禁用端口 2。 默认值已设置为 port1

    2.端口 1 关闭时,我调用 netif_set_link_down(port1_netif ),然后调用 netif_set_default(port2_netif ) 和 netif_set_link_up(port2_netif )。 这会将第二个端口设为默认端口。

    3.当端口 1 再次恢复时,我会以相同的链路中断、默认和设置调用顺序启动它。

    我会通过检查 while 循环中的网络事件来持续监控两个端口的状态

    此致

    Varma