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 Добавить, Поддержать, Вебмастеру |