В Linux реализован протокол Appletalk, описанный в
Inside Appletalk.
В ядре есть лишь уровни DDP и AARP. Они рассчитаны на использование
библиотеками протоколов
netatalk.
Эта страница описывает интерфейс желающим использовать уровень DDP
непосредственно.
Связь между Appletalk и программой пользователя реализована через
интерфейс сокетов, совместимых с BSD. Дополнительную информацию о сокетах
можно найти в
socket(7).
Сокет Appletalk создается путем вызова функции
socket(2),
которой в качестве аргумента семьи (family) сокета указано значение
PF_APPLETALK.
Тип сокета может быть
SOCK_DGRAM
(чтобы открыть сокет
ddp)
или
SOCK_RAW
для сокета
raw.
protocol
устанавливает протокол приема-передачи Appletalk.
SOCK_RAW
необходимо указать значение
ATPROTO_DDP.
Сокеты Raw могут быть открыты только процессом с идентификатором
эффективного пользователя, равным нулю, либо процессом, имеющим возможность
CAP_NET_RAW.
ФОРМАТЫ АДРЕСОВ
Адрес сокета Appletalk определяется как комбинация номера сети, номера узла
(node) и номера порта.
Установленное значение
sat_family
всегда равно
AF_APPLETALK. sat_port
содержит номер порта. Порты с номерами меньше 129-и известны как
зарезервированные порты.
Вызывать этим сокетам функцию
bind(2)
может только процесс, имеющий либо идентификатор эффективного
пользователя, равный нулю, либо возможность
CAP_NET_BIND_SERVICE.
sat_addr
является адресом машины.
Поле
net
структуры
struct at_addr
содержит адрес сети машины (в сетевом порядке расположения байт). Значение
AT_ANYNET
является шаблоном, включающим в себя и lqэту сетьrq.
Поле
node
структуры
struct at_addr
содержит номер узла машины. Значение
AT_ANYNODE
является шаблоном, включающим в себя и lqэтот узелrq. Значение
ATADDR_BCAST
является ссылкой на локальный широковещательный адрес.
ОПЦИИ СОКЕТОВ
Опции сокета, специфичные для протокола, не поддерживаются.
СИСТЕМНЫЕ ВЫЗОВЫ
IP поддерживает интерфейс sysctl для настройки некоторых общих параметров
Appletalk. Доступ к sysctl можно получить путем чтения или записи файлов
/proc/sys/net/atalk/*
или с помощью интерфейса
sysctl(2).
aarp-expiry-time
Временной интервал (в секундах) до момента устаревания записи в кэше AARP.
aarp-resolve-time
Временной интервал (в секундах) до определения записи в кэше AARP.
aarp-retransmit-limit
Количество повторных передач запроса AARP, до того, как запись будет объявлена
недействительной.
aarp-tick-time
Скорость таймера, управляющего AARP, в секундах.
Значения по умолчанию соответствуют описанию и никогда не должны меняться.
СИСТЕМНЫЕ ВЫЗОВЫ
Все вызовы ioctl, описанные в
socket(7),
относятся и к ddp.
ЗАМЕЧАНИЯ
Будьте очень осторожны при работе с опцией
SO_BROADCAST:
она не относится к привилегированным в Linux. При невнимательной рассылке
сообщений по широковещательному адресу легко перегрузить сеть.
ВЕРСИИ
Appletalk поддерживается Linux версии 2.0 и более поздних. Интерфейс
sysctl
появился в Linux 2.2.
НАЙДЕННЫЕ ОШИБКИ
ENOTCONN
Операция предназначена только для соединенного сокета, а сокет не был соединен.
EINVAL
Передан неправильный аргумент.
EMSGSIZE
Размер датаграммы больше размера DDP MTU.
EACCES
Пользователь попытался выполнить операцию, не имея на то соответствующих прав.
Это относится к передаче информации по широковещательному адресу при сброшенном
флаге широковещательной передачи, а также к попытке соединения с
зарезервированным портом, когда идентификатор эффективного пользователя
отличается от нуля или отсутствует возможность
CAP_NET_BIND_SERVICE.
EADDRINUSE
Попытка соединения с уже используемым адресом.
ENOMEM and ENOBUFS
Hедостаточно памяти в системе для выполнения данной операции.
ENOPROTOOPT and EOPNOTSUPP
Передана неправильная опция сокета.
EPERM
Пользователь не имеет прав на установку высокого приоритета, изменение
конфигурации или посылку сигналов определенному процессу или группе.
EADDRNOTAVAIL
Был запрошен несуществующий интерфейс, или запрошенный адрес источника не
являлся локальным.
EAGAIN
Операция на неблокируемом сокете блокируется.
ESOCKTNOSUPPORT
Сокет не был настроен, или был запрошен неизвестный тип сокета.
EISCONN
Был произведен вызов
connect(2)
в уже соединенном сокете.
EALREADY
Операция соединения в неблокируемом сокете уже производится.
Соединение было неожиданно закрыто другой стороной.
ENOENT
Был произведен вызов
SIOCGSTAMP
при отсутствии прибывшего в сокет пакета.
EHOSTUNREACH
Hет записи таблицы маршрутизации, указывающей на адрес назначения.
ENODEV
Сетевое устройство недоступно или не имеет возможности посылать IP.
ENOPKG
Подсистема ядра не была настроена.
СОВМЕСТИМОСТЬ
Базовый интерфейс сокетов Appletalk совместим с
netatalk
в BSD-подобных системах. Многие системы BSD не проверяют
SO_BROADCAST
при посылке широковещательных кадров: это может привести к проблемам
совместимости.
Режим сокетов raw поддерживается только в Linux и предназначен для облегчения
поддержки альтернативных пакетов CAP и утилит мониторинга AppleTalk.
НАЙДЕННЫЕ ОШИБКИ
Слишком много противоречивых ошибок.
Вызовы ioctl для настройки таблиц маршрутизации, устройств, таблиц AARP и
других устройств пока что не описаны.