Linux поддерживает несколько стандартных вызовов ioctl для настройки сетевых устройств. Они могут применяться для любого файлового описателя сокета независимо от семейства или типа сокета. В качестве параметра передается структура ifreq:
struct ifreq {
    char            ifr_name[IFNAMSIZ];   /* Имя интерфейса */
    union {
                    struct sockaddr       ifr_addr;
                    struct sockaddr       ifr_dstaddr;
                    struct sockaddr       ifr_broadaddr;
                    struct sockaddr       ifr_netmask;
                    struct sockaddr       ifr_hwaddr;
                    short                 ifr_flags;
                    int                   ifr_ifindex;
                    int                   ifr_metric;
                    int                   ifr_mtu;
                    struct ifmap          ifr_map;
                    char                  ifr_slave[IFNAMSIZ];
                    char                  ifr_newname[IFNAMSIZ];
                    char *                ifr_data;
    };
};
struct ifconf { 
    int ifc_len;                          /* размер буфера */
    union {            
                    char *                ifc_buf; /* адрес буфера */ 
                    struct ifreq *ifc_req; /* массив структур */
    };  
};     
Обычно пользователь обозначает устройство, присваивая ему имя интерфейса 
ifr_name.
Все остальные поля структуры могут использоваться совместно.
 
| Флаги устройства | |
| IFF_UP | Интерфейс активен. | 
| IFF_BROADCAST | Установлен правильный широковещательный адрес. | 
| IFF_DEBUG | Флаг внутренней отладки. | 
| IFF_LOOPBACK | Интерфейс является устройством обратной петли. | 
| IFF_POINTOPOINT | Интерфейс является point-to-point соединением. | 
| IFF_RUNNING | Ресурсы выделены. | 
| IFF_NOARP | Hет протокола arp, адрес назначения 2-ого уровня (L2) не установлен. | 
| IFF_PROMISC | Интерфейс в "смешанном" (promiscuous) режиме. | 
| IFF_NOTRAILERS | Избегать использования trailers. | 
| IFF_ALLMULTI | Принимать все многоадресные пакеты. | 
| IFF_MASTER | Мастер связки балансирования загрузкой (load balancing bundle). | 
| IFF_SLAVE | Подчиненный связки балансирования нагрузкой. | 
| IFF_MULTICAST | Поддерживает многоадресное вещание. | 
| IFF_PORTSEL | Может выбирать тип носителя с помощью ifmap. | 
| IFF_AUTOMEDIA | Запущен автоматический выбор носителя. | 
| IFF_DYNAMIC | Эти адреса потеряны, если интерфейс неактивен. | 
struct ifmap 
{
    unsigned long   mem_start;
    unsigned long   mem_end;
    unsigned short  base_addr; 
    unsigned char   irq;                  
    unsigned char   dma; 
    unsigned char   port; 
};
Интерпретация структуры ifmap зависит от драйвера устройства и архитектуры системы.
Большинство протоколов поддерживают свои собственные вызовы ioctl для настройки предназначенных только для протокола параметров интерфейса. Подробности приведены на страницах руководства о протоколах. Hастройка адресов IP описывается в ip(7).
В дополнение ко всему, некоторые устройства поддерживают частные (private) вызовы ioctl. Здесь они не описаны.
Имена интерфейсов, не имеющих адресов или установленного флага IFF_RUNNING, можно определить с помощью /proc/net/dev.
Местные IP-адреса IPv6 могут быть найдены через /proc/net или по rtnetlink(7).
#ifndef ifr_newname #define ifr_newname ifr_ifru.ifru_slave #endif
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |