ddp(7) | Miscellaneous Information Manual | ddp(7) |
ИМЯ
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; /* address family */ unsigned char sat_port; /* port */ struct at_addr sat_addr; /* net/node */ };
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 и других устройств пока что не описаны.
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД
Русский перевод этой страницы руководства разработал Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.
2 мая 2024 г. | Linux man-pages 6.8 |