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
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@usa.net> (tradução)
André L. Fassone Canova <lonelywolf@blv.com.br>
(revisão)