有没有办法列出从网络驱动程序中绑定到特定设备的所有多播IP地址?
我了解如何使用id
通过net_device
结构遍历多播MAC地址列表。我也理解从组播MAC到IP的映射,但它不是1对1映射,这就是我对获取IP组播组感兴趣的原因。
我使用3.10.0内核运行Centos 7
目标是在加入和删除多播组时在netdev_for_each_mc_addr()
中访问此列表。
我看到set_rx_mode()
结构中包含的内容是net_device
,并进一步嵌套在struct in_device
内。考虑到这一点,我尝试了以下内容来遍历struct ip_mc_list
。
ip_mc_list
不幸的是,当组播IP地址绑定到设备时,ip_list仍为static void set_rx_mode(struct net_device *netdev)
{
struct ip_mc_list *ip_list = netdev->ip_ptr->mc_list;
while(ip_list) {
printk(KERN_DEBUG " IP MC Address: 0x%x\n", ip_list->multiaddr);
ip_list = ip_list->next;
}
}
。如果这不是内核IGMP实现中使用的NULL
,那么有没有办法访问正确的?{1}}?
答案 0 :(得分:0)
我可以通过使用in_device
访问in_dev_get(struct *net_device)
结构来获取IP多播地址。以下是工作代码:
static void set_rx_mode(struct net_device *netdev)
{
struct in_device *in_dev = in_dev_get(netdev);
struct ip_mc_list *ip_list = in_dev->mc_list;
while(ip_list) {
printk(KERN_DEBUG " IP MC Address: 0x%x\n", ip_list->multiaddr);
ip_list = ip_list->next;
}
}