2015-11-17 5 views
0

Есть ли способ перечислить все IP-адреса многоадресной передачи, привязанные к определенному устройству, из сетевого драйвера?Список IP-адресов многоадресной передачи, привязанных к определенному устройству от сетевого драйвера

Я понимаю, как перебирать список MAC-адресов многоадресной передачи через структуру net_device, используя netdev_for_each_mc_addr(). Я также понимаю, что существует сопоставление MAC-адресов с многоадресной рассылкой, но это не сопоставление от 1 до 1, поэтому я заинтересован в получении групп многоадресной передачи IP.

Я бегу Centos 7 с 3.10.0 ядром

Цель состоит в том, чтобы этот список в set_rx_mode() при многоадресной группы соединяются и отброшен.

Я вижу, что содержание, содержащееся в структуре net_device, является struct in_device и далее вложенным в него является struct ip_mc_list. Имея это в виду, я попробовал повторить итерацию через ip_mc_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; 

    } 
} 

К сожалению, ip_list остается NULL когда Multicast IP-адрес, связанный с устройством. Если это не то же самое struct in_device, используемое в реализации IGMP ядра, есть ли способ получить доступ к правильному?

ответ

0

Я смог получить IP-адреса многоадресной передачи, обратившись к структуре in_device, используя in_dev_get(struct *net_device). Ниже приведен рабочий код:

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; 

    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^