Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

Эти вызовы получают или возвращают структуру

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.8. Операции с кэшем ARP

Операции с кэшем ARP также осуществляются с помощью функции

ioctl
. В этих запросах используется структура
arpreq
, показанная в листинге 17.9 и определяемая в заголовочном файле
<net/if_arp.h>
.

Листинг 17.9. Структура arpreq, используемая с вызовами ioctl для кэша ARP

struct arpreq {

struct sockaddr arp_pa; /* адрес протокола */

struct sockaddr arp_ha; /* аппаратный адрес */

int arp_flags; /* флаги */

};

#define ATF_INUSE 0x01 /* запись, которую нужно использовать */

#define ATF_COM 0x02 /* завершенная запись */

#define ATF_PERM 0x04 /* постоянная запись */

#define ATF_PUBL 0x08 /* опубликованная запись (отсылается другим узлам) */

Третий аргумент функции

ioctl
должен указывать на одну из этих структур. Поддерживаются следующие три вызова:

SIOCSARP
. Добавляет новую запись в кэш ARP или изменяет существующую запись.
arp_pa
— это структура адреса сокета Интернета, содержащая IP-адрес, a
arp_ha
— это общая структура адреса сокета с элементом
ss_family
, равным
AF_UNSPEC
, и элементом
sa_data
, содержащим аппаратный адрес (например, 6-байтовый адрес Ethernet). Два флага
ATF_PERM
и
ATF_PUBL
могут быть заданы приложением. Два других флага,
ATF_INUSE
и
ATF_COM
, устанавливаются ядром.

SIOCDARP
. Удаляет запись из кэша ARP. Вызывающий процесс задает интернет-адрес удаляемой записи.

SIOCGARP
. Получает запись из кэша ARP. Вызывающий процесс задает интернет-адрес, и соответствующий адрес Ethernet возвращается вместе с флагами.

Добавлять или удалять записи может только привилегированный пользователь. Эти три вызова обычно делает программа

arp
.

ПРИМЕЧАНИЕ

Запросы функции ioctl, связанные с ARP, не поддерживаются в некоторых более новых системах, использующих для описанных операций ARP маршрутизирующие сокеты.

  • Читать дальше
  • 1
  • ...
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: