Читать книгу 📗 "Операционная система UNIX - Робачевский Андрей Михайлович"
Функции
pr_input()
pr_output()
pr_ctlinput()
pr_ctloutput()
mbuf
mbuf
Поле
pr_flags
PR_CONNREQUIRED
PR_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_UP
IFF_BROADCAST
ifa_broadaddr
ifaddr
IFF_POINTOPOINT
ifa_dstaddr
ifa_broadaddr
ifa_dstaddr
IFF_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
Легко заметить, что команда выводит значение следующих полей структуры
ifnet
le0
if_name
if_flags
if_mtu
inet
ifa_addr
netmask
ifa_netmask
broadcast
ifa_broadaddr
Интерфейс хранит статистическую информацию, которая может быть использована при мониторинге сети. В частности, эта информация включает число полученных пакетов уровня канала (
if_ipackets
if_ierrors
if_opackets
if_oerrors
if_collisions