Provided by: manpages-ru_4.18.1-1_all bug

ИМЯ

       netdevice - низкоуровневый доступ к сетевым устройствам Linux

СИНТАКСИС

       #include <sys/ioctl.h>
       #include <net/if.h>

ОПИСАНИЕ

       В  этой  справочной  странице описан интерфейс сокетов, используемый для настройки сетевых
       устройств.

       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;
               };
           };

       AF_INET6 is an exception.  It passes an in6_ifreq structure:

           struct in6_ifreq {
               struct in6_addr     ifr6_addr;
               u32                 ifr6_prefixlen;
               int                 ifr6_ifindex; /* Interface index */
           };

       Normally, the user specifies which device to affect by setting ifr_name to the name of the
       interface  or  ifr6_ifindex  to  the  index  of  the  interface.  All other members of the
       structure may share memory.

   Вызовы ioctl
       Если указано, вызов ioctl считается привилегированным, то для его использования необходимо
       иметь  эффективный  идентификатор  пользователя  0  или  мандат CAP_NET_ADMIN. В противном
       случае будет возвращено значение EPERM.

       SIOCGIFNAME
              Возвращает в  ifr_name  имя  интерфейса  для  заданного  индекса  ifr_ifindex.  Это
              единственный вызов ioctl, возвращающий результат в ifr_name.

       SIOCGIFINDEX
              Возвращает индекс интерфейса в ifr_ifindex.

       SIOCGIFFLAGS, SIOCSIFFLAGS
              Считывает или устанавливает слово флагов устройства. В ifr_flags содержится битовая
              маска из следующих значений:

                                                      Флаги устройства
              IFF_UP            Интерфейс активен.
              IFF_BROADCAST     Установлен правильный широковещательный адрес.
              IFF_DEBUG         Флаг внутренней отладки.
              IFF_LOOPBACK      Интерфейс является устройством обратной петли.
              IFF_POINTOPOINT   Интерфейс является соединением точка-точка.
              IFF_RUNNING       Ресурсы выделены.
              IFF_NOARP         Нет протокола arp, адрес назначения 2-ого уровня (L2) не установлен.
              IFF_PROMISC       Интерфейс в режиме прослушки (promiscuous).
              IFF_NOTRAILERS    Избегать использования концевиков (trailers).
              IFF_ALLMULTI      Принимать все многоадресные пакеты.
              IFF_MASTER        Мастер в связке балансирования нагрузки.
              IFF_SLAVE         Подчинённый в связке балансирования нагрузки.
              IFF_MULTICAST     Поддержка многоадресной передачи.
              IFF_PORTSEL       Может выбирать тип среды с помощью ifmap.
              IFF_AUTOMEDIA     Запущен автоматический выбор среды.
              IFF_DYNAMIC       Адреса теряются, если интерфейс становится неактивным.
              IFF_LOWER_UP      Сигналы драйвера L1 указывают на включение интерфейса (начиная с Linux 2.6.17).
              IFF_DORMANT       Сигналы драйвера указывают на неактивность интерфейса (начиная с Linux 2.6.17).
              IFF_ECHO          Посылать пакеты echo (начиная с Linux 2.6.25).

       Установка флага в слове флагов является  привилегированной  операцией,  но  считывать  его
       может любой процесс.

       SIOCGIFPFLAGS, SIOCSIFPFLAGS
              Считает  или  устанавливает  (индивидуальные)  флаги устройства. Значение ifr_flags
              представляет собой битовую маску следующих значений:

                                                       Индивидуальные флаги
              IFF_802_1Q_VLAN      Интерфейс является устройством 802.1Q VLAN.
              IFF_EBRIDGE          Интерфейс является устройством моста Ethernet.
              IFF_SLAVE_INACTIVE   Интерфейс является неактивным подчинённым в связке балансирования нагрузки.
              IFF_MASTER_8023AD    Интерфейс является мастером в связке балансирования нагрузки 802.3ad.
              IFF_MASTER_ALB       Интерфейс является мастером связки балансирования нагрузки в режиме balanced-alb.
              IFF_BONDING          Интерфейс является мастером или подчинённым в связке балансирования нагрузки.
              IFF_SLAVE_NEEDARP    Интерфейсу требуется ARP для проверки.
              IFF_ISATAP           Интерфейс является интерфейсом RFC4214 ISATAP.

       Установка  расширенных  (индивидуальных)  флагов  интерфейса  является   привилегированной
       операцией.

       SIOCGIFADDR, SIOCSIFADDR, SIOCDIFADDR
              Get,  set,  or  delete  the address of the device using ifr_addr, or ifr6_addr with
              ifr6_prefixlen.   Setting  or  deleting  the  interface  address  is  a  privileged
              operation.    For   compatibility,  SIOCGIFADDR  returns  only  AF_INET  addresses,
              SIOCSIFADDR accepts AF_INET and AF_INET6 addresses, and  SIOCDIFADDR  deletes  only
              AF_INET6  addresses.   A  AF_INET  address can be deleted by setting it to zero via
              SIOCSIFADDR.

       SIOCGIFDSTADDR, SIOCSIFDSTADDR
              Назначает  или  получает  адрес  назначения  устройства   точка-точка   с   помощью
              ifr_dstaddr.   Для   совместимости,  принимаются  или  возвращаются  только  адреса
              семейства  AF_INET.  Присвоение  адреса   назначения   является   привилегированной
              операцией.

       SIOCGIFBRDADDR, SIOCSIFBRDADDR
              Назначает  или  получает  широковещательный адрес устройства с помощью ifr_brdaddr.
              Для совместимости, принимаются или возвращаются только  адреса  семейства  AF_INET.
              Присвоение широковещательного адреса является привилегированной операцией.

       SIOCGIFNETMASK, SIOCSIFNETMASK
              Назначает   или   получает   маску  сети  устройства  с  помощью  ifr_netmask.  Для
              совместимости,  принимаются  или  возвращаются  только  адреса  семейства  AF_INET.
              Назначение маски сети адреса является привилегированной операцией.

       SIOCGIFMETRIC, SIOCSIFMETRIC
              Считывает  или  устанавливает  метрику  устройства  с  помощью ifr_metric. В данный
              момент  возможность  не  реализована;  при  считывании   ifr_metric   присваивается
              значение, равное нулю, а при попытке установки возвращается значение EOPNOTSUPP.

       SIOCGIFMTU, SIOCSIFMTU
              Считывает  или  устанавливает  MTU  (Maximum  Transfer  Unit  — максимальную порцию
              данных) с помощью ifr_mtu.  Установка  MTU  является  привилегированной  операцией.
              Установка слишком маленьких значений может привести к авариям в ядре.

       SIOCGIFHWADDR, SIOCSIFHWADDR
              Считывает  или  устанавливает  аппаратный  адрес  устройства  с помощью ifr_hwaddr.
              Аппаратный  адрес  задаётся  в  структуре  sockaddr.  В  sa_family  содержится  тип
              устройства  ARPHRD_*,  в sa_data содержится аппаратный адрес L2, начиная с байта 0.
              Установка аппаратного адреса является привилегированной операцией.

       SIOCSIFHWBROADCAST
              Устанавливает аппаратный широковещательный адрес устройства с  помощью  ifr_hwaddr.
              Это привилегированная операция.

       SIOCGIFMAP, SIOCSIFMAP
              Считывает  или  устанавливает  аппаратные  параметры  интерфейса с помощью ifr_map.
              Установка параметров является привилегированной операцией.

                  struct ifmap {
                      unsigned long   mem_start;
                      unsigned long   mem_end;
                      unsigned short  base_addr;
                      unsigned char   irq;
                      unsigned char   dma;
                      unsigned char   port;
                  };

              Назначение структуры ifmap зависит от драйвера устройства и архитектуры системы.

       SIOCADDMULTI, SIOCDELMULTI
              Добавляет или  удаляет  адрес  из  фильтров  многоадресной  передачи  уровня  связи
              устройства  с  помощью  ifr_hwaddr.  Это привилегированная операция. Альтернативный
              способ приведен в packet(7).

       SIOCGIFTXQLEN, SIOCSIFTXQLEN
              Считывает или устанавливает размер очереди передачи устройства с помощью  ifr_qlen.
              Установка размера очереди передачи является привилегированной операцией.

       SIOCSIFNAME
              Изменяет    имя   интерфейса,   указанное   в   ifr_name,   на   ifr_newname.   Это
              привилегированная операция. Она разрешена только тогда, когда интерфейс не активен.

       SIOCGIFCONF
              Return a list of interface (network layer) addresses.  This  currently  means  only
              addresses  of the AF_INET (IPv4) family for compatibility.  Unlike the others, this
              ioctl passes an ifconf structure:

                  struct ifconf {
                      int               ifc_len; /* size of buffer */
                      union {
                          char         *ifc_buf; /* buffer address */
                          struct ifreq *ifc_req; /* array of structures */
                      };
                  };

              Если ifc_req равно NULL, то SIOCGIFCONF  возвращает  необходимый  размер  буфера  в
              байтах  для  приёма  всех  доступных  адресов в ifc_len. В противном случае ifc_req
              содержит указатель на массив структур ifreq, который будет заполнен  адресами  всех
              активных  интерфейсов  L3.  В  ifc_len  содержится  размер массива в байтах. Внутри
              каждой структуры ifreq в ifr_name будет записано имя интерфейса,  а  в  ifr_addr  —
              адрес. Реальное количество переданных байт возвращается в ifc_len.

              Если  размера,  указанного  в ifc_len, недостаточно для сохранения всех адресов, то
              ядро не запишет не поместившиеся и сообщит об успешном  выполнении.  Не  существует
              надёжного  способа  обнаружения возникновения такой ситуации. Поэтому рекомендуется
              или сначала определить необходимый размер буфера вызовом  SIOCGIFCONF  с  значением
              ifc_req  равным  NULL,  или  повторить  вызов  с  большим  буфером  и  проверить не
              отличается ли ifc_len на менее чем sizeof(struct ifreq) от первого значения.

              Если произошла ошибка доступа к структуре ifconf или ifreq, то возвращается EFAULT.

       Большинство  протоколов  поддерживают  свои  собственные  вызовы   ioctl   для   настройки
       предназначенных  только  для  протокола  параметров  интерфейса.  Подробности  приведены в
       справочных страницах протоколов. Настройка адресов IP описывается в ip(7).

       В дополнение ко всему, некоторые устройства поддерживают индивидуальные  (private)  вызовы
       ioctl. Здесь они не описаны.

ЗАМЕЧАНИЯ

       SIOCGIFCONF  and  the other ioctls that accept or return only AF_INET socket addresses are
       IP-specific and perhaps should rather be documented in ip(7).

       Имена  интерфейсов,  не  имеющих  адресов  или  установленного  флага  IFF_RUNNING,  можно
       определить с помощью /proc/net/dev.

       AF_INET6 IPv6 addresses can be read from /proc/net/if_inet6 or via rtnetlink(7).  Adding a
       new IPv6 address and deleting an existing IPv6 address can be  done  via  SIOCSIFADDR  and
       SIOCDIFADDR  or  via rtnetlink(7).  Retrieving or changing destination IPv6 addresses of a
       point-to-point interface is possible only via rtnetlink(7).

ДЕФЕКТЫ

       В glibc 2.1 отсутствует макрос ifr_newname в файле <net/if.h>. Добавьте следующие строки в
       вашу программу (чтобы обойти это):

           #ifndef ifr_newname
           #define ifr_newname     ifr_ifru.ifru_slave
           #endif

СМ. ТАКЖЕ

       proc(5), capabilities(7), ip(7), rtnetlink(7)

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства  был сделан Alex Nik <rage.iz.me@gmail.com>,
       Azamat Hackimov <azamat.hackimov@gmail.com>,  Dmitry  Bolkhovskikh  <d20052005@yandex.ru>,
       Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.