Читать книгу 📗 "Операционная система UNIX - Робачевский Андрей Михайлович"
Функции
pr_input()pr_output()pr_ctlinput()pr_ctloutput()mbufmbufПоле
pr_flagsPR_CONNREQUIREDPR_WANTRCVDЗаметим, что каждый модуль протокола имеет собственные очереди сообщений, используемые для приема и передачи данных.
Каждый сетевой интерфейс системы представлен структурой данных, показанной на рис. 6.23. Сетевой интерфейс обычно связан с соответствующим сетевым адаптером, хотя это не является обязательным условием. Например, внутренний сетевой интерфейс loopback представляет собой псевдоустройство, используемое для унифицированного взаимодействия сетевых процессов в рамках одного хоста, отладки и т.п.

Рис. 6.23. Сетевой интерфейс
Решение об использовании того или иного сетевого интерфейса для передачи сообщения базируется на таблице маршрутизации и производится модулем сетевого уровня. Интерфейс может обслуживать протоколы различных коммуникационных доменов. Соответственно, один и тот же интерфейс может иметь несколько адресов, определенных для каждого семейства протоколов. Структуры, определяющие локальный и широковещательный (broadcast) адреса интерфейса, а также сетевую маску, хранятся в виде связанного списка.
Каждый сетевой интерфейс имеет очередь, в которую помещаются сообщения для последующей передачи, выполняемой функцией
if_output()if_init()if_reset()if_watchdog()Состояние интерфейса характеризуется флагами, хранящимися в поле
if_flagsТаблица 6.8. Состояния интерфейса
| Флаг | Значение |
|---|---|
IFF_UP | Интерфейс доступен для использования |
IFF_BROADCAST | Интерфейс поддерживает широковещательные адреса |
IFF_MULTICAST | Интерфейс поддерживает групповые адреса |
IFF_DEBUG | Интерфейс обеспечивает возможность отладки |
IFF_LOOPBACK | Программный внутренний интерфейс |
IFF_POINTOPOINT | Интерфейс для канала точка-точка |
IFF RUNNING | Ресурсы интерфейса успешно размещены |
IFF_NOARP | Интерфейс не использует протокол трансляции адреса |
Флаг
IFF_UPIFF_BROADCASTifa_broadaddrifaddrIFF_POINTOPOINTifa_dstaddrifa_broadaddrifa_dstaddrIFF_RUNNINGСостояние интерфейса и ряд других параметров можно просмотреть с помощью команды ifconfig(1M):
$ <b>ifconfig le0</b>le0: flags=863<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 194.85.160.50 netmask: ffffff00 broadcast 194.85.160.255Легко заметить, что команда выводит значение следующих полей структуры
ifnetle0if_nameif_flagsif_mtuinetifa_addrnetmaskifa_netmaskbroadcastifa_broadaddrИнтерфейс хранит статистическую информацию, которая может быть использована при мониторинге сети. В частности, эта информация включает число полученных пакетов уровня канала (
if_ipacketsif_ierrorsif_opacketsif_oerrorsif_collisions