列出从网络驱动程序绑定到特定设备的多播IP地址

时间:2015-11-17 17:37:33

标签: linux-kernel linux-device-driver multicast

有没有办法列出从网络驱动程序中绑定到特定设备的所有多播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}}?

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;

    }
}