NOME
ddp − Implementação do protocolo Linux AppleTalk
SINOPSE
#include
<sys/socket.h>
#include <netatalk/at.h>
ddp_socket
= socket(PF_APPLETALK, SOCK_DGRAM, 0);
raw_socket = socket(PF_APPLETALK, SOCK_RAW,
protocol);
DESCRIÇÃO
Linux implementa os protocolos Appletalk descritos em Por dentro do Appletalk. Somente a camada DDP e o AARP estão presentes no kernel. Eles são projetados para serem usados nas bibliotecas do protocolo netatalk Esta página documenta a interface para aqueles que desejam ou precisam usar a camada DDP diretamente.
A comunicação entre Appletalk e o programa do usuário funciona usando uma interface de socket compatível com BSD. Para mais informações sobre sockets, veja socket(7).
Um socket AppleTalk é criado chamando-se a função socket(2) com um argumento PF_APPLETALK da família de socket. Tipos de sockets válidos são SOCK_DGRAM para abrir um socket ddp ou SOCK_RAW para abrir um socket raw protocol é um protocolo Appletalk para ser recebido ou enviado. Para SOCK_RAW Você deve especificar ATPROTO_DDP.
Raw sockets só podem ser abertos por um processo com um id efetivo de usuário igual a 0, ou quando o processo tem a propriedade CAP_NET_RAW
FORMATO DO ENDEREÇO
Um endereço de socket Appletalk é definido como uma combinação de um número de rede, um número de nó e um número de porta.
struct at_addr {
u_short |
s_net; | ||
u_char |
s_node; |
};
struct sockaddr_atalk {
sa_family_t |
sat_family; | ||
/* família de endereço */ | |||
u_char |
sat_port; | ||
/* porta */ | |||
struct at_addr |
sat_addr; | ||
/* rede/nó */ |
};
sat_family é sempre setado para AF_APPLETALK. sat_port contém a porta. Os números de porta abaixo de 129 são conhecidos como portas reservadas. Apenas os processos com id efetivo de usuário igual a 0, ou com a propriedade CAP_NET_BIND_SERVICE podem realizar bind(2) com esses sockets. sat_addr é o endereço do host. O membro net de struct at_addr contém a rede do host, em ordem de byte da rede. O valor de AT_ANYNET é um coringa, e também significa “esta rede.” O membro nó de struct at_addr contém o número do nó do host. O valor de AT_ANYNODE é um coringa, e também significa “este nó.” O valor de ATADDR_BCAST é um endereço local de broadcast de link.
OPÇÕES DE SOCKET
Nenhuma opção de socket específica de protocolo é suportada.
SYSCTLS
IP suporta uma
interface sysctl para configurar alguns parâmetros
globais do AppleTalk. Os sysctls podem ser acessados pela
leitura ou escrita nos arquivos /proc/sys/net/atalk/*
ou com a interface sysctl(2)
aarp-expiry-time
O intervalo de tempo (em segundos) antes de uma entrada de cache AARP expirar.
aarp-resolve-time
O intervalo de tempo (em segundos) antes de uma entrada de cache AARP ser resolvida.
aarp-retransmit-limit
O número de retransmissões de uma pesquisa AARP antes que o nó seja declarado morto.
aarp-tick-time
A taxa do temporizador (em segundos) para o temporizador que controla o AARP.
Os valores padrão casam com a especificação e nunca deveriam ser alterados.
IOCTLS
Todos os ioctls descritos em socket(7) aplicam-se ao ddp.
NOTAS
Seja muito cuidadoso com a opção SO_BROADCAST − ela não é privilegiada em Linux. É fácil sobrecarregar a rede com transmissões descuidadas para endereços de broadcast.
VERSÕES
Appletalk é suportado pelo Linux versão 2.0 ou superior. A interface sysctl é nova no Linux 2.2.
ERROS
ENOTCONN
A operação só é definida sobre um socket conectado, mas o socket não está conectado.
EINVAL |
Um argumento inválido foi passado. |
EMSGSIZE
O datagrama é maior que o MTU DDP.
EACCES |
O usuário tentou executar uma operação sem as permissões necessárias. Isso inclui envios a um endereço de broadcast sem ter a flag de broadcast setada, e tentativas de executar um bind em uma porta reservada sem um id efetivo de usuário igual a 0 ou CAP_NET_BIND_SERVICE. |
EADDRINUSE
Tentativa de executar um bind em um endereço já em uso.
ENOMEM and ENOBUFS
Não há memória disponível.
ENOPROTOOPT and EOPNOTSUPP
Uma opção de socket inválido foi passada.
EPERM |
Usuário não tem permissão de setar alta prioridade, fazer uma mudança de configuração, ou enviar sinais para um processo ou grupo requerido. |
EADDRNOTAVAIL
Uma interface não existente foi requerida, ou o endereço de fonte requerida não era local.
EAGAIN |
Operation on a nonblocking socket would block. |
ESOCKTNOSUPPORT
O socket foi desconfigurado, ou um tipo de socket desconhecido foi requerido.
EISCONN
connect(2) foi chamado sobre um socket já conectado.
EALREADY
Uma operação de conexão sobre um socket não-bloqueado já está em progresso.
ECONNABORTED
Uma conexão foi fechada durante um accept(2).
EPIPE |
A conexão foi fechada ou desligada inesperadamente pelo outra extremidade. | ||
ENOENT |
SIOCGSTAMP foi chamado sobre um socket onde nenhum pacote chegou. |
EHOSTUNREACH
Nenhuma entrada da tabela de roteamento encontrou o endereço de destino.
ENODEV |
O dispositivo de rede não está disponível, ou não é capaz de enviar IP. | ||
ENOPKG |
Um subsistema do kernel não foi configurado. |
COMPATIBILITY
A interface básica do socket AppleTalk é compatível com netatalk em sistemas derivados do BSD. Muitos sistemas BSD falham na checagem de SO_BROADCAST quando enviam quadros de broadcast; isto pode levar a problemas de compatibilidade.
O modo de socket raw é único em Linux e existe para suportar o pacote alternativo CAP e as ferramentas de monitoramento AppleTalk mais facilmente.
ERROS
Há muitos valores de erro inconsistentes.
Os ioctls usados para configurar tabelas de roteamento, dispositivos, tabelas AARP e outros dispositivos ainda não foram descritos.
VEJA TAMBÉM
sendmsg(2), recvmsg(2), socket(7)
TRADUZIDO POR LDP-BR em 21/08/2000.
Rubens de Jesus Nogueira <darkseid99 [AT] usa.net> (tradução) André L. Fassone Canova <lonelywolf [AT] blv.br> (revisão)