Книга: UNIX: разработка сетевых приложений
17.7. Операции с интерфейсами
17.7. Операции с интерфейсами
Как мы показали в предыдущем разделе, запрос SIOCGIFCONF
возвращает имя и структуру адреса сокета для каждого сконфигурированного интерфейса. Существует множество других вызовов, позволяющих установить или получить все остальные характеристики интерфейса. Версия get
этих вызовов (SIOCGxxx
) часто запускается программой netstat
, а версия set(SIOCSxxx
) — программой ifconfig
. Любой пользователь может получить информацию об интерфейсе, в то время как установка этой информации требует прав привилегированного пользователя.
Эти вызовы получают или возвращают структуру ifreq
, адрес которой задается в качестве третьего аргумента функции ioctl
. Интерфейс всегда идентифицируется по имени: le0
, lo0
, ppp0
, — то есть по имени, заданному в элементе ifr_name
структуры ifreq
.
Многие из этих запросов используют структуру адреса сокета, для того чтобы задать или возвратить IP-адрес или маску адреса. Для IPv4 адрес или маска содержится в элементе sin_addr
из структуры адреса сокета Интернета. Для IPv6 они помещаются в элемент sin6_addr
структуры адреса сокета IPv6.
? SIOCGIFADDR
. Возвращает адрес направленной передачи в элементе ifr_addr
.
? SIOCSIFADDR
. Устанавливает адрес интерфейса из элемента ifr_addr
. Также вызывается функция инициализации для интерфейса.
? SIOCGIFFLAGS
. Возвращает флаги интерфейса в элементе ifr_flags
. Имена различных флагов определяются в виде IFF_xxx
в заголовочном файле <net/if.h>
. Флаги указывают, например, включен ли интерфейс (IFF_UP
), является ли он интерфейсом типа «точка-точка» (IFF_POINTOPOINT
), поддерживает ли широковещательную передачу (IFF_BROADCAST
) и т.д.
? SIOCSIFFLAGS
. Устанавливает флаги из элемента ifr_flags
.
? SIOCGIFDSTADDR
. Возвращает адрес типа «точка-точка» в элементе ifr_dstaddr
.
? SIOCSIFDSTADDR
. Устанавливает адрес типа «точка-точка» из элемента ifr_dstaddr
.
? SIOCGIFBRDADDR
. Возвращает широковещательный адрес в элементе ifr_broadaddr
. Приложение сначала должно получить флаги интерфейса, а затем сделать корректный вызов: SIOCGIFBRDADDR
для широковещательного интерфейса или SIOCGIFDSTADDR
— для интерфейса типа «точка-точка».
? SIOCSIFBRDADDR
. Устанавливает широковещательный адрес из элемента ifr_broadaddr
.
? SIOCGIFNETMASK
. Возвращает маску подсети в элементе ifr_addr
.
? SIOCSIFNETMASK
. Устанавливает маску подсети из элемента ifr_addr
.
? SIOCGIFMETRIC
. Возвращает метрику интерфейса в элементе ifr_metric
. Метрика поддерживается ядром для каждого интерфейса, но используется демоном маршрутизации routed
. Метрика интерфейса добавляется к счетчику количества переходов.
? SIOCSIFMETRIC
. Устанавливает метрику интерфейса из элемента ifr_metric
.
В этом разделе мы описали наиболее типичные операции интерфейсов. Во многих реализациях появились дополнительные операции.
- Глава 17 Операции функции ioctl
- 7.3.3. Энергонезависимая память с последовательными интерфейсами
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- Операции с множествами узлов
- 4. Null-значения и логические операции
- 1. Операции объединения, пересечения, разности
- 2. Операции декартового произведения и естественного соединения
- 5. Производные операции
- 2. Унарные операции на языке структурированных запросов
- 3. Бинарные операции на языке структурированных запросов
- 5. Операции внутреннего соединения.
- ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ