18.2. Структура адреса сокета канального уровня

18.2. Структура адреса сокета канального уровня

Структуры адреса сокета канального уровня будут встречаться нам как значения, содержащиеся в некоторых сообщениях, возвращаемых на маршрутизирующем сокете. В листинге 18.1[1] показано определение структуры, задаваемой в заголовочном файле <net/if_dl.h>.

Листинг 18.1. Структура адреса сокета канального уровня

struct sockaddr_dl {

 uint8_t     sdl_len;

 sa_family_t sdl_family;   /* AF_LINK */

 uint16_t    sdl_index;    /* индекс интерфейса, присвоенный системой,

                              если > 0 */

 uint8_t     sdl_type;     /* тип интерфейса из <net/if_types.h>.

 IFT_ETHER и т.д. */

 uint8_t     sdl_nlen;     /* длина имени, начинается с sdl_data[0] */

 uint8_t     sdl_alen;     /* длина адреса канального уровня */

 uint8_t     sdl_slen;     /* адрес селектора канального уровня */

 char        sdl_data[12]; /* минимальная рабочая область.

                              может быть больше; содержит имя

                              интерфейса и адрес канального уровня */

};

У каждого интерфейса имеется уникальный положительный индекс. Далее в этой главе мы увидим, каким образом он возвращается функциями if_nametoindex и if_nameindex. В главе 21 при обсуждении параметров многоадресных сокетов IPv6 и в главе 27 при обсуждении дополнительных параметров сокетов IPv6 и IPv4 мы вновь вернемся к этим функциям.

Элемент sdl_data содержит и имя, и адрес канального уровня (например, 48-разрядный MAC-адрес интерфейса Ethernet). Имя начинается с sdl_data[0] и не заканчивается нулем. Начало адреса канального уровня смещено на sdl_nlen байтов относительно начала имени. В этом заголовочном файле для возвращения указателя на адрес канального уровня задается следующий макрос:

#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))

Эти структуры адреса сокета имеют переменную длину [128, с. 89]. Если адрес канального уровня и имя превышают 12 байт, размер структуры будет больше 20 байт. В 32-разрядных системах размер обычно округляется в большую сторону, до следующего числа, кратного 4 байтам. Мы также увидим на рис. 22.1, что когда одна из этих структур возвращается параметром сокета IP_RECVIF, все три длины становятся нулевыми, а элемента sdl_data не существует.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

5.2.2 Определения уровня ПО

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России


Атрибуты уровня компоновочного блока (и уровня модуля)

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Атрибуты уровня компоновочного блока (и уровня модуля) Можно также задать применение атрибутов ко всем типам в рамках данного модуля или всех модулей в рамках данного компоновочного блока, если, соответственно, использовать признаки [module:] или [assembly:]. Предположим, что нам


Структура адреса страницы Google с результатами поиска

Из книги Интернет. Новые возможности. Трюки и эффекты [litres] автора Баловсяк Надежда Васильевна

Структура адреса страницы Google с результатами поиска Информация о структуре адреса страницы с результатами поиска позволит вам лучше разобраться в принципах использования поисковых машин.Вот пример характерного адреса: http://www.google.com/search?num=55&hl=en&q=piter. Он состоит из


Создание сокета

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Создание сокета Инициализировав Winsock DLL, вы можете использовать стандартные (Berkeley Sockets) функции для создания сокетов и соединений, обеспечивающих взаимодействие серверов с клиентами или взаимодействие равноправных узлов сети между собой.Используемый в Winsock тип данных


Связывание сокета

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Связывание сокета Следующий шаг заключается в привязке сокета к его адресу и конечной точке (endpoint) (направление канала связи от приложения к службе). Вызов socket, за которым следует вызов bind, аналогичен созданию именованного канала. Однако не существует имен, используя


Глава 4 Технологии физического уровня и уровня связи данных

Из книги О чём не пишут в книгах по Delphi автора Григорьев А. Б.

Глава 4 Технологии физического уровня и уровня связи данных 4.1 Введение За последние несколько лет было предложено беспрецедентное количество новых технологий для локальных и региональных сетей, быстро утвердившихся на компьютерном рынке. Произошел огромный скачок от


2.1.8. Создание сокета

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.


2.1.17. Параметры сокета

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

2.1.17. Параметры сокета Каждый сокет обладает рядом параметров (опций), которые влияют на его работу. Существуют параметры уровня сокета, которые относятся к сокету как к объекту безотносительно используемого протокола и его уровня. Впрочем, некоторые параметры уровня


17.3.1. Создание сокета

Из книги автора

17.3.1. Создание сокета Новые сокеты создаются системным вызовом socket(), который возвращает файловый дескриптор для неинициализированного сокета. При создании сокет привязывается к определенному протоколу, однако соединение для сокета не устанавливается. На данном этапе


17.6.1. Создание UDP-сокета

Из книги автора

17.6.1. Создание UDP-сокета Как и любой другой сокет, UDP-сокет создается с помощью функции socket(), однако второй аргумент должен быть SOCK_DGRAM, а последний — либо IPPROTO_UDP, либо просто ноль (так как UDP является стандартным IP-дейтаграммным протоколом).После создания сокета ему


Структура адреса сокета IPv4

Из книги автора

Структура адреса сокета IPv4 Структура адреса сокета IPv4, обычно называемая структурой адреса сокета Интернета, именуется sockaddr_in и определяется в заголовочном файле <netinet/in.h>. В листинге 3.1[1] представлено определение POSIX.Листинг 3.1. Структура адреса сокета Интернета (IPv4):


Структура адреса сокета IPv6

Из книги автора

Структура адреса сокета IPv6 Структура адреса сокета IPv6 задается при помощи включения заголовочного файла <netinet/in.h>, как показано в листинге 3.3.Листинг 3.3. Структура адреса сокета IPv6: sockaddr_in6struct in6_addr { uint8_t s6_addr[16]; /* 128-разрядный адрес IPv6 */                      /* сетевой


Новая универсальная структура адреса сокета

Из книги автора

Новая универсальная структура адреса сокета Новая универсальная структура адреса сокета была определена как часть API сокетов IPv6 с целью преодолеть некоторые недостатки существующей структуры sockaddr. В отличие от структуры sockaddr, новая структура sockaddr_storage достаточно


15.2. Структура адреса доменного сокета Unix

Из книги автора

15.2. Структура адреса доменного сокета Unix В листинге 15.1[1] показана структура адреса доменного сокета Unix, задаваемая включением заголовочного файла <sys/un.h>.Листинг 15.1. Структура адреса доменного сокета Unix: sockaddr_unstruct sockaddr_un { uint8_t     sun_len; sa_family_t sun_family;    /* AF_LOCAL


29.3. DLPI: интерфейс поставщика канального уровня

Из книги автора

29.3. DLPI: интерфейс поставщика канального уровня SVR4 обеспечивает доступ к канальному уровню через DLPI (Data Link Provider Interface — интерфейс поставщика канального уровня). DLPI — это не зависящий от протокола интерфейс, разработанный в AT&T и служащий средством связи с сервисами,