ИМЯ

ddp - реализация протокола AppleTalk в Linux

СИНТАКСИС

#include <sys/socket.h>
#include <netatalk/at.h>
ddp_socket = socket(AF_APPLETALK, SOCK_DGRAM, 0);
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;
};
struct sockaddr_atalk { sa_family_t sat_family; /* адресное семейство */ unsigned char sat_port; /* порт */ struct at_addr sat_addr; /* сеть/узел */ };

sat_family is always set to AF_APPLETALK. sat_port contains the port. The port numbers below 129 are known as reserved ports. Only processes with the effective user ID 0 or the CAP_NET_BIND_SERVICE capability may bind(2) to these sockets. sat_addr is the host address. The net member of struct at_addr contains the host network in network byte order. The value of AT_ANYNET is a wildcard and also implies “this network.” The node member of struct at_addr contains the host node number. The value of AT_ANYNODE is a wildcard and also implies “this node.” The value of ATADDR_BCAST is a link local broadcast address.

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

Специальные параметры сокета для протокола не поддерживаются.

Интерфейс /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 и других устройств пока что не описаны.

СМ. ТАКЖЕ

recvmsg(2), sendmsg(2), capabilities(7), socket(7)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]

Recommended readings

Pages related to ddp you should read also: