我有一个设备,它由运行嵌入式linux的独立模块组成。这些模块都是相同的硬件和软件,但是执行不同的任务取决于它们在设备中的位置。所有模块通过内部网络相互通信。根据设备中的位置静态地设置模块的ip地址。这是通过让模块读取物理设置的设备来实现的,该设备返回0-15的数字。它插入模块,但物理上连接到设备中的位置。一个设备可能有6个机架,所以有6个这样的插头设置1-6.
我希望设备确定是否有任何模块被错误设置,因为这将导致两个或多个模块具有相同的IP地址。这可能是由于设置错误或位置开关损坏造成的。模块之间使用广播的UDP消息进行通信。消息的数据成员之一是一个独特的48位序列号,即MAC地址.
我最初的计划是让所有模块将来自自己的消息与它们的序列号进行比较,如果它们不匹配,则抛出一个错误。问题是模块只接收来自自身或另一个IP地址的广播数据包。他们看到的不是来自同一个IP地址的数据包,而是来自不同模块的数据包。
当我使用ifconfig检查接口时,我可以看到Rx数据包在增加,但是当我使用netstat -su时,我什么也看不到。UDP Rx数据包永远不会增加。因此,在某个时候,它们被从堆栈中删除。
有办法绕道吗?我知道我可以依靠第三个节点来告诉它正在接收来自同一个IP地址但不同的MACs的广播数据包,但是我希望每个模块都能自我意识到这个问题。
发布于 2014-08-05 21:45:45
在启动时,模块应该广播一个ARP数据包,将它们的MAC和IP连接起来。这是重复IP地址的“正常”解决方案,您可以收听这些广播并发送一个新的,这样您的模块将检测到网络上的其他人正在使用相同的IP。
https://stackoverflow.com/questions/25148637
复制相似问题