.\" -*- coding: UTF-8 -*- '\" t .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" $Id: netdevice.7,v 1.10 2000/08/17 10:09:54 ak Exp $ .\" .\" Modified, 2004-11-25, mtk, formatting and a few wording fixes .\" .\" Modified, 2011-11-02, , added many basic .\" but missing ioctls, such as SIOCGIFADDR. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH netdevice 7 "15 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ netdevice \- низкоуровневый доступ к сетевым устройствам Linux .SH СИНТАКСИС .nf \fB#include \fP \fB#include \fP .fi .SH ОПИСАНИЕ В этой справочной странице описан интерфейс сокетов, используемый для настройки сетевых устройств. .PP Linux поддерживает несколько стандартных вызовов ioctl для настройки сетевых устройств. Они могут применяться для любого файлового дескриптора сокета независимо от семейства или типа сокета. В качестве параметра большинство из них передаёт структуру \fIifreq\fP: .PP .in +4n .EX 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; }; }; .EE .in .PP \fBAF_INET6\fP is an exception. It passes an \fIin6_ifreq\fP structure: .PP .in +4n .EX struct in6_ifreq { struct in6_addr ifr6_addr; u32 ifr6_prefixlen; int ifr6_ifindex; /* Interface index */ }; .EE .in .PP Normally, the user specifies which device to affect by setting \fIifr_name\fP to the name of the interface or \fIifr6_ifindex\fP to the index of the interface. All other members of the structure may share memory. .SS "Вызовы ioctl" Если указано, вызов ioctl считается привилегированным, то для его использования необходимо иметь эффективный идентификатор пользователя 0 или мандат \fBCAP_NET_ADMIN\fP. В противном случае будет возвращено значение \fBEPERM\fP. .TP \fBSIOCGIFNAME\fP Возвращает в \fIifr_name\fP имя интерфейса для заданного индекса \fIifr_ifindex\fP. Это единственный вызов ioctl, возвращающий результат в \fIifr_name\fP. .TP \fBSIOCGIFINDEX\fP Возвращает индекс интерфейса в \fIifr_ifindex\fP. .TP \fBSIOCGIFFLAGS\fP, \fBSIOCSIFFLAGS\fP .\" Do not right adjust text blocks in tables Считывает или устанавливает слово флагов устройства. В \fIifr_flags\fP содержится битовая маска из следующих значений: .na .TS tab(:); c s l l. Флаги устройства IFF_UP:Интерфейс активен. IFF_BROADCAST:Установлен правильный широковещательный адрес. IFF_DEBUG:Флаг внутренней отладки. IFF_LOOPBACK:Интерфейс является устройством обратной петли. IFF_POINTOPOINT:Интерфейс является соединением точка\-точка. IFF_RUNNING:Ресурсы выделены. IFF_NOARP:T{ Нет протокола arp, адрес назначения 2\-ого уровня (L2) не установлен. T} IFF_PROMISC:Интерфейс в режиме прослушки (promiscuous). IFF_NOTRAILERS:Избегать использования концевиков (trailers). IFF_ALLMULTI:Принимать все многоадресные пакеты. IFF_MASTER:Мастер в связке балансирования нагрузки. IFF_SLAVE:Подчинённый в связке балансирования нагрузки. IFF_MULTICAST:Поддержка многоадресной передачи. IFF_PORTSEL:Может выбирать тип среды с помощью ifmap. IFF_AUTOMEDIA:Запущен автоматический выбор среды. IFF_DYNAMIC:T{ Адреса теряются, если интерфейс становится неактивным. T} IFF_LOWER_UP:Сигналы драйвера L1 указывают на включение интерфейса (начиная с Linux 2.6.17). IFF_DORMANT:Сигналы драйвера указывают на неактивность интерфейса (начиная с Linux 2.6.17). IFF_ECHO:Посылать пакеты echo (начиная с Linux 2.6.25). .TE .ad .PP Установка флага в слове флагов является привилегированной операцией, но считывать его может любой процесс. .TP \fBSIOCGIFPFLAGS\fP, \fBSIOCSIFPFLAGS\fP Считает или устанавливает (индивидуальные) флаги устройства. Значение \fIifr_flags\fP представляет собой битовую маску следующих значений: .TS tab(:); c s l l. Индивидуальные флаги 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. .TE .PP Установка расширенных (индивидуальных) флагов интерфейса является привилегированной операцией. .TP \fBSIOCGIFADDR\fP, \fBSIOCSIFADDR\fP, \fBSIOCDIFADDR\fP Get, set, or delete the address of the device using \fIifr_addr\fP, or \fIifr6_addr\fP with \fIifr6_prefixlen\fP. Setting or deleting the interface address is a privileged operation. For compatibility, \fBSIOCGIFADDR\fP returns only \fBAF_INET\fP addresses, \fBSIOCSIFADDR\fP accepts \fBAF_INET\fP and \fBAF_INET6\fP addresses, and \fBSIOCDIFADDR\fP deletes only \fBAF_INET6\fP addresses. A \fBAF_INET\fP address can be deleted by setting it to zero via \fBSIOCSIFADDR\fP. .TP \fBSIOCGIFDSTADDR\fP, \fBSIOCSIFDSTADDR\fP Назначает или получает адрес назначения устройства точка\-точка с помощью \fIifr_dstaddr\fP. Для совместимости, принимаются или возвращаются только адреса семейства \fBAF_INET\fP. Присвоение адреса назначения является привилегированной операцией. .TP \fBSIOCGIFBRDADDR\fP, \fBSIOCSIFBRDADDR\fP Назначает или получает широковещательный адрес устройства с помощью \fIifr_brdaddr\fP. Для совместимости, принимаются или возвращаются только адреса семейства \fBAF_INET\fP. Присвоение широковещательного адреса является привилегированной операцией. .TP \fBSIOCGIFNETMASK\fP, \fBSIOCSIFNETMASK\fP Назначает или получает маску сети устройства с помощью \fIifr_netmask\fP. Для совместимости, принимаются или возвращаются только адреса семейства \fBAF_INET\fP. Назначение маски сети адреса является привилегированной операцией. .TP \fBSIOCGIFMETRIC\fP, \fBSIOCSIFMETRIC\fP Считывает или устанавливает метрику устройства с помощью \fIifr_metric\fP. В данный момент возможность не реализована; при считывании \fIifr_metric\fP присваивается значение, равное нулю, а при попытке установки возвращается значение \fBEOPNOTSUPP\fP. .TP \fBSIOCGIFMTU\fP, \fBSIOCSIFMTU\fP Считывает или устанавливает MTU (Maximum Transfer Unit — максимальную порцию данных) с помощью \fIifr_mtu\fP. Установка MTU является привилегированной операцией. Установка слишком маленьких значений может привести к авариям в ядре. .TP \fBSIOCGIFHWADDR\fP, \fBSIOCSIFHWADDR\fP Считывает или устанавливает аппаратный адрес устройства с помощью \fIifr_hwaddr\fP. Аппаратный адрес задаётся в структуре \fIsockaddr\fP. В \fIsa_family\fP содержится тип устройства ARPHRD_*, в \fIsa_data\fP содержится аппаратный адрес L2, начиная с байта 0. Установка аппаратного адреса является привилегированной операцией. .TP \fBSIOCSIFHWBROADCAST\fP Устанавливает аппаратный широковещательный адрес устройства с помощью \fIifr_hwaddr\fP. Это привилегированная операция. .TP \fBSIOCGIFMAP\fP, \fBSIOCSIFMAP\fP Считывает или устанавливает аппаратные параметры интерфейса с помощью \fIifr_map\fP. Установка параметров является привилегированной операцией. .IP .in +4n .EX struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; }; .EE .in .IP Назначение структуры ifmap зависит от драйвера устройства и архитектуры системы. .TP \fBSIOCADDMULTI\fP, \fBSIOCDELMULTI\fP Добавляет или удаляет адрес из фильтров многоадресной передачи уровня связи устройства с помощью \fIifr_hwaddr\fP. Это привилегированная операция. Альтернативный способ приведен в \fBpacket\fP(7). .TP \fBSIOCGIFTXQLEN\fP, \fBSIOCSIFTXQLEN\fP Считывает или устанавливает размер очереди передачи устройства с помощью \fIifr_qlen\fP. Установка размера очереди передачи является привилегированной операцией. .TP \fBSIOCSIFNAME\fP Изменяет имя интерфейса, указанное в \fIifr_name\fP, на \fIifr_newname\fP. Это привилегированная операция. Она разрешена только тогда, когда интерфейс не активен. .TP \fBSIOCGIFCONF\fP Return a list of interface (network layer) addresses. This currently means only addresses of the \fBAF_INET\fP (IPv4) family for compatibility. Unlike the others, this ioctl passes an \fIifconf\fP structure: .IP .in +4n .EX struct ifconf { int ifc_len; /* size of buffer */ union { char *ifc_buf; /* buffer address */ struct ifreq *ifc_req; /* array of structures */ }; }; .EE .in .IP Если \fIifc_req\fP равно NULL, то \fBSIOCGIFCONF\fP возвращает необходимый размер буфера в байтах для приёма всех доступных адресов в \fIifc_len\fP. В противном случае \fIifc_req\fP содержит указатель на массив структур \fIifreq\fP, который будет заполнен адресами всех активных интерфейсов L3. В \fIifc_len\fP содержится размер массива в байтах. Внутри каждой структуры \fIifreq\fP в \fIifr_name\fP будет записано имя интерфейса, а в \fIifr_addr\fP — адрес. Реальное количество переданных байт возвращается в \fIifc_len\fP. .IP Если размера, указанного в \fIifc_len\fP, недостаточно для сохранения всех адресов, то ядро не запишет не поместившиеся и сообщит об успешном выполнении. Не существует надёжного способа обнаружения возникновения такой ситуации. Поэтому рекомендуется или сначала определить необходимый размер буфера вызовом \fBSIOCGIFCONF\fP с значением \fIifc_req\fP равным NULL, или повторить вызов с большим буфером и проверить не отличается ли \fIifc_len\fP на менее чем \fIsizeof(struct ifreq)\fP от первого значения. .IP .\" Slaving isn't supported in Linux 2.2 .\" . .\" .TP .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE .\" Get or set the slave device using .\" .IR ifr_slave . .\" Setting the slave device is a privileged operation. .\" .PP .\" FIXME . add amateur radio stuff. Если произошла ошибка доступа к структуре \fIifconf\fP или \fIifreq\fP, то возвращается \fBEFAULT\fP. .PP Большинство протоколов поддерживают свои собственные вызовы ioctl для настройки предназначенных только для протокола параметров интерфейса. Подробности приведены в справочных страницах протоколов. Настройка адресов IP описывается в \fBip\fP(7). .PP В дополнение ко всему, некоторые устройства поддерживают индивидуальные (private) вызовы ioctl. Здесь они не описаны. .SH ЗАМЕЧАНИЯ \fBSIOCGIFCONF\fP and the other ioctls that accept or return only \fBAF_INET\fP socket addresses are IP\-specific and perhaps should rather be documented in \fBip\fP(7). .PP Имена интерфейсов, не имеющих адресов или установленного флага \fBIFF_RUNNING\fP, можно определить с помощью \fI/proc/net/dev\fP. .PP \fBAF_INET6\fP IPv6 addresses can be read from \fI/proc/net/if_inet6\fP or via \fBrtnetlink\fP(7). Adding a new IPv6 address and deleting an existing IPv6 address can be done via \fBSIOCSIFADDR\fP and \fBSIOCDIFADDR\fP or via \fBrtnetlink\fP(7). Retrieving or changing destination IPv6 addresses of a point\-to\-point interface is possible only via \fBrtnetlink\fP(7). .SH ДЕФЕКТЫ В glibc 2.1 отсутствует макрос \fIifr_newname\fP в файле \fI\fP. Добавьте следующие строки в вашу программу (чтобы обойти это): .PP .in +4n .EX #ifndef ifr_newname #define ifr_newname ifr_ifru.ifru_slave #endif .EE .in .SH "СМ. ТАКЖЕ" \fBproc\fP(5), \fBcapabilities\fP(7), \fBip\fP(7), \fBrtnetlink\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alex Nik , Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .