NOMBRE¶
ddp - Implementanción de Linux del protocolo AppleTalk
SINOPSIS¶
#include <sys/socket.h>
#include <netatalk/at.h>
ddp_socket = socket(PF_APPLETALK, SOCK_DGRAM, 0);
raw_socket = socket(PF_APPLETALK, SOCK_RAW,
protocol);
DESCRIPCIÓN¶
Linux implementa el protocolo Appletalk descrito en
Inside Appletalk.
Únicamente la capa DDP y el AARP se encuentran dentro del núcleo.
Están diseñados para ser usados mediante las bibliotecas
netatalk del protocolo. Esta página documenta la interfaz para
aquellos que desean o necesitan usar la capa DDP directamente.
La comunicación entre Appletalk y el programa de usuario funciona usando
una interfaz de conectores compatible con BSD. Para más información
sobre conectores, vea
socket(7).
Un conector Appletalk se crea llamando a la función
socket(2) y
pasando
PF_APPLETALK como familia del conector. Los tipos de conectores
válidos son
SOCK_DGRAM para abrir un conector
ddp o
SOCK_RAW para abrir un conector
raw (directo).
protocol
es el protocolo Appletalk a ser recibido o enviado. Para
SOCK_RAW debe
especificar
ATPROTO_DDP.
Los conectores directos sólo pueden ser abiertos por un proceso cuyo
identificador de usuario efectivo sea 0 o por un proceso que posea la
capacidad
CAP_NET_RAW.
La dirección de un conector Appletalk se define como la combinación de
un número de red, un número de nodo y un número de puerto.
struct at_addr {
u_short s_net;
u_char s_node;
};
struct sockaddr_atalk {
sa_family_t sat_family; /* familia de direcciones */
u_char sat_port; /* port */
struct at_addr sat_addr; /* red/nodo */
};
A
sat_family siempre se le asigna el valor
AF_APPLETALK.
sat_port contiene el puerto. Los números de puerto por debajo de
129 se conocen como
puertos reservados. Sólo los procesos con
identificador de usuario efectivo 0 o con la capacidad
CAP_NET_BIND_SERVICE pueden enlazar estos conectores mediante
bind(2).
sat_addr es la dirección del anfitrión
(host). El miembro
net de
struct at_addr contiene la red del
anfitrión expresada en el formato "orden de red" de los bytes.
El valor
AT_ANYNET es un comodín y también implica
“esta red.” El miembro
node de
struct at_addr
contiene el número de nodo del anfitrión. El valor
AT_ANYNODE
es un comodín y también implica “este nodo.” El valor de
ATADDR_BCAST es la dirección de enlace de difusión local.
OPCIONES DE LOS CONECTORES¶
No se soportan opciones de conector específicas del protocolo.
SYSCTLS¶
IP soporta una interfaz sysctl para configurar algunos parámetros AppleTalk
globales. Se puede acceder a las sysctls leyendo o escribiendo los ficheros
del directorio
/proc/sys/net/atalk o con la interfaz
sysctl(2).
- aarp-expiry-time
- El intervalo de tiempo (en segundos) antes de que una
entrada de la cache AARP expire.
- aarp-resolve-time
- El intervalo de tiempo (en segundos) antes de que se
resuelva una entrada de la cache AARP.
- aarp-retransmit-limit
- El número de retransmisiones de una entrada AARP antes
de que el nodo sea declarado muerto.
- aarp-tick-time
- La frecuencia del cronómetro (en segundos) para el
cronómetro que controla el AARP.
Los valores por defecto coinciden con la especificación y nunca debe ser
necesario el cambiarlos.
IOCTLS¶
Todas las ioctls descritas en
socket(7) se aplican también a ddp.
OBSERVACIONES¶
Tenga cuidado con la opción
SO_BROADCAST (no es privilegiada en
Linux). Es fácil sobrecargar la red sin darse cuenta enviando a la
direcciones de difusión.
VERSIONES¶
Appletalk está soportado a partir de la versión 2.0 de Linux. La
interfaz
sysctl es nueva en la versión 2.2 de Linux.
ERRORES¶
- ENOTCONN
- La operación sólo está definida en un
conector conectado pero el conector no está conectado.
- EINVAL
- Se ha pasado un argumento inválido.
- EMSGSIZE
- El datagrama es mayor que la MTU de DDP.
- EACCES
- El usuario ha intentado ejecutar una operación sin los
permisos necesarios. Estos incluyen el enviar a una dirección de
difusión sin haber activado la opción de difusión e
intentar el enlace a un puerto reservado sin un identificador de usuario
efectivo 0 y sin CAP_NET_BIND_SERVICE.
- EADDRINUSE
- Se ha intentado el enlace a una dirección ya en
uso.
- ENOMEM y ENOBUFS
- No hay suficiente memoria disponible.
- ENOPROTOOPT y EOPNOTSUPP
- Se han pasado opciones de conector inválidas.
- EPERM
- El usuario no tiene permiso para establecer una prioridad
más alta, hacer un cambio a la configuración o enviar
señales al proceso o grupo solicitado.
- EADDRNOTAVAIL
- Se ha solicitado una interfaz inexistente o la
dirección fuente solicitada no es local.
- EAGAIN
- La operación se bloquearía sobre un conector
bloqueante.
- ESOCKTNOSUPPORT
- El conector está sin configurar o se ha solicitado un
tipo de conector desconocido.
- EISCONN
- Se ha llamado a connect(2) sobre un conector ya
conectado.
- EALREADY
- Ya se está realizando una operación de
conexión sobre un conector no bloqueante.
- ECONNABORTED
- Se ha cerrado la conexión durante un
accept(2).
- EPIPE
- La conexión ha sido cerrada o cancelada por el otro
extremo.
- ENOENT
- Se ha llamado a SIOCGSTAMP sobre un conector en
donde no han llegado paquetes.
- EHOSTUNREACH
- No existe una entrada en la tabla de enrutamiento que
coincida con la dirección de destino.
- ENODEV
- El dispositivo de red no está disponible o es incapaz
de enviar IP.
- ENOPKG
- No se ha configurado un subsistema del núcleo.
COMPATIBILIDAD¶
La interfaz básica de conectores AppleTalk es compatible con
netatalk en los sistemas derivados de BSD. Muchos sistemas BSD fallan
al comprobar
SO_BROADCAST cuando se envían tramas de
difusión. Esto puede conducir a problemas de compatibilidad.
El modo de conector directo es único de Linux y existe para soportar
más fácilmente el paquete alternativo CAP y las herramientas de
monitorización de AppleTalk.
FALLOS¶
Hay demasiados valores de error inconsistentes.
Las ioctls usadas para configurar las tablas de enrutamiento, dispositivos,
tablas AARP y otros dispositivos no se han descrito todavía.
VÉASE TAMBIÉN¶
sendmsg(2),
recvmsg(2),
socket(7)