Linux
2017-09-15
man-pages-ru
Russian man pages from the Linux Documentation Project
manpages
Manual pages about using a GNU/Linux system
man-pages
Linux kernel and C library user-space interface documentation
ИМЯ
ddp - реализация протокола AppleTalk в Linux
ОБЗОР
#include <sys/socket.h>
#include <netatalk/at.h>
#include <netatalk/at.h>
ddp_socket = socket(AF_APPLETALK, SOCK_DGRAM, 0);
raw_socket = socket(AF_APPLETALK, SOCK_RAW, protocol);
raw_socket = socket(AF_APPLETALK, SOCK_RAW, protocol);
ОПИСАНИЕ
В Linux реализованы протоколы AppleTalk, описанные в Inside AppleTalk. В ядре есть лишь уровни DDP и AARP. Они проектировались с учётом того, что ими будут пользоваться через библиотеку протоколов netatalk. В этой странице описан интерфейс для тех, кому требуется использовать уровень DDP напрямую.
Связь между AppleTalk и пользовательской программой реализована через интерфейс сокетов, совместимых с BSD. Дополнительную информацию о сокетах можно найти в socket(7).
Сокет AppleTalk создаётся из вызова socket(2), которому в качестве аргумента семейства указывается значение AF_APPLETALK. Типом сокета может быть SOCK_DGRAM (чтобы открыть сокет ddp) или SOCK_RAW (для открытия сокета raw). Значением protocol устанавливается протокол приема-передачи AppleTalk. При SOCK_RAW необходимо указать значение ATPROTO_DDP.
Неструктурированные сокеты могут быть открыты только процессом с идентификатором эффективного пользователя, равным нулю, либо процессом, имеющим мандат CAP_NET_RAW.
Формат адреса
Адрес сокета AppleTalk определяется как комбинация номера сети, номера узла и номера порта.
struct at_addr {
unsigned short s_net;
unsigned char s_node; };
unsigned short s_net;
unsigned char s_node; };
struct sockaddr_atalk {
sa_family_t sat_family; /* адресное семейство */
unsigned char sat_port; /* порт */
struct at_addr sat_addr; /* сеть/узел */ };
sa_family_t sat_family; /* адресное семейство */
unsigned char sat_port; /* порт */
struct at_addr sat_addr; /* сеть/узел */ };
Значение sat_family всегда устанавливается в AF_APPLETALK. В sat_port содержится номер порта. Порты с номерами меньше 129 называются зарезервированными портами. Вызов bind(2) для этих сокетов допустим только для процессов, у которых идентификатор эффективного пользователя равен нулю, либо имеется мандат CAP_NET_BIND_SERVICE. В sat_addr указан адрес машины (host). Поле net структуры struct at_addr содержит адрес сети машины в сетевом порядке расположения байт. Значение AT_ANYNET является шаблоном, включающим в себя и \(lqэту сеть\(rq. Поле node структуры struct at_addr содержит номер узла машины. Значение AT_ANYNODE является шаблоном, включающим в себя и \(lqэтот узел\(rq. Значение ATADDR_BCAST является ссылкой на локальный широковещательный адрес.
Параметры сокета
Специальные параметры сокета для протокола не поддерживаются.
Интерфейсы /proc
IP поддерживает набор интерфейсов /proc для настройки некоторых общих параметров Appletalk. Доступ к параметрам можно получить путем чтения или записи файлов в каталоге /proc/sys/net/atalk/.
Значения по умолчанию соответствуют спецификации и никогда не должны меняться.
aarp-expiry-time | |
Временной интервал (в секундах) до момента устаревания записи в кэше AARP. | |
aarp-resolve-time | |
Временной интервал (в секундах) до определения записи в кэше AARP. | |
aarp-retransmit-limit | |
Количество повторных передач запроса AARP до того, как запись будет объявлена недействительной. | |
aarp-tick-time | |
Скорость таймера управляющего AARP в секундах. |
Вызовы ioctl
Все вызовы ioctl, описанные в socket(7), применимы к DDP.
ОШИБКИ
EACCES | Пользователь попытался выполнить операцию, не имея на то соответствующих прав. Это относится к передаче информации по широковещательному адресу при сброшенном флаге широковещательной передачи, а также к попытке соединения с зарезервированным портом, когда идентификатор эффективного пользователя отличается от нуля или отсутствует мандат CAP_NET_BIND_SERVICE. |
EADDRINUSE | |
Попытка связать сокет с уже используемым адресом. | |
EADDRNOTAVAIL | |
Был запрошен несуществующий интерфейс или запрошенный исходящий адрес не является локальным. | |
EAGAIN | Действие над неблокирующим сокетом привело бы к его блокировке. |
EALREADY | |
Операция соединения на неблокирующем сокете уже находится в процессе выполнения. | |
ECONNABORTED | |
Соединение закрыто во время accept(2). | |
EHOSTUNREACH | |
Нет записи в таблице маршрутизации, указывающей на адрес назначения. | |
EINVAL | Передан неверный аргумент. |
EISCONN | |
Вызов connect(2) запущен для сокета, уже установившего соединение. | |
EMSGSIZE | |
Размер датаграммы больше размера DDP MTU. | |
ENODEV | Сетевое устройство недоступно или неспособно посылать IP. |
ENOENT | Операция SIOCGSTAMP вызвана для сокета, который ещё не получил ни одного пакета. |
ENOMEM и ENOBUFS | |
Недостаточно памяти. | |
ENOPKG | Не настроена подсистема ядра. |
ENOPROTOOPT и EOPNOTSUPP | |
Передан недопустимый параметр сокета. | |
ENOTCONN | |
Операция определена только для сокета, установившего соединение, а этот сокет не соединён. | |
EPERM | У пользователя нет достаточных полномочий, чтобы повысить приоритет, изменить настройку или послать сигнал запрашиваемому процессу или группе процессов. |
EPIPE | Соединение неожиданно закрылось или завершено (shut down) другой стороной. |
ESOCKTNOSUPPORT | |
Сокет не настроен или запрошен неизвестный тип сокета. |
ВЕРСИИ
AppleTalk поддерживается в Linux версии 2.0 и более поздних. Интерфейс /proc появился в Linux 2.2.
ЗАМЕЧАНИЯ
Будьте очень осторожны при работе с параметром SO_BROADCAST: в Linux он не относится к привилегированным. Масштабная рассылка сообщений по широковещательному адресу может легко перегрузить сеть.
Совместимость
Базовый интерфейс сокетов Appletalk совместим с netatalk в BSD-подобных системах. Многие системы BSD не проверяют SO_BROADCAST при посылке широковещательных кадров: это может привести к проблемам совместимости.
Режим неструктурированных сокетов поддерживается только в Linux и предназначен для облегчения поддержки альтернатив пакета CAP и утилит мониторинга AppleTalk.
ДЕФЕКТЫ
Слишком много противоречий в значениях ошибок.
Вызовы ioctl для настройки таблиц маршрутизации, устройств, таблиц AARP и других устройств пока что не описаны.