Provided by:
manpages-pt_20040726-4_all 
NOME
arp - módulo de kernel para ARP em Linux.
DESCRIÇÃO
Este módulo de protocolo de kernel implementa o Protocolo de Resolução
de Endereços (Address Resolution Protocol) definido na RFC 826. Ele é
usado para converter o endereço de hardware da camada 2 para endereços
do protocolo IPv4 em redes diretamente conectadas. Normalmente o
usuário não interage diretamente com este módulo, exceto para
configurá-lo; em vez disso, ele provê um serviço para outros protocolos
no kernel.
Um processo de usuário pode receber pacotes ARP através do uso de
sockets do tipo packet(7). Há também um mecanisco de gerenciamento do
cache ARP no espaço de usuário, através do uso de sockets do tipo
netlink(7). A tabela ARP também pode ser controlada via ioctl (2) ou
qualquer socket do tipo PF_INET
O módulo ARP matém um cache de mapeamento entre endereços de hardware e
endereços de protocolo. O cache tem um tamanho limitado pois há uma
"coleta de lixo" entre entradas mais antigas e usadas com menos
freqüência. Entradas que são marcadas como permanentes nunca são
apagadas pelo coletor de lixo. O cache pode ser manipulado diretamente
pelo uso de ioctls, e seu comportamento pode ser ajustado pelos sysctls
definidos abaixo.
Quando não há feedback positiva para um mapeamento existente depois de
um certo tempo (veja os sysctls abaixo), uma entrada de cache vizinha é
considerada travada. Para enviar dados para o destino novamente, o ARP
primeiro tenta pedir ao daemon arp local um endereço MAC atualizado por
app_solicit vezes. Se falhar, e um endereço MAC antigo é conhecido, um
teste de unicast é enviado ucast_solicit vezes. Se falhar também, ele
fará um broadcast de um novo pedido de ARP na rede. Pedidos são
enviados apenas quando há dado enfileirado para envio.
O Linux acrescentará automaticamete uma entrada não permanente de arp
proxy quando receber um pedido de um endereço para encaminhamento, e o
arp proxy é habilitado na interface de recepção. Quando houver uma rota
rejeitada para o destino, nenhuma entrada de arp proxy é acrescentada.
IOCTLS
Esses ioctls são disponíveis em todos os sockets PF_INET Eles pegam um
ponteiro para um struct arpreq como parâmetro.
struct arpreq
{
struct sockaddr arp_pa; /* endereço de protocolo */
struct sockaddr arp_ha; /* endereço de hardware */
int arp_flags; /* flags */
struct sockaddr arp_netmask; /* máscara de rede do endereço de protocolo */
char arp_dev[16];
};
SIOCSARP, SIOCDARP e SIOCGARP respectivamente seta, deleta e obtém um
mapeamento ARP. Setar e deletar mapas ARP são operações privilegiadas
e só podem ser realizadas por um processo com a capabilidade
CAP_NET_ADMIN ou com um UID efetivo igual a 0.
arp_pa deve ser um socket AF_INET e arp_ha deve ter o mesmo tipo que o
dispositivo especificado em arp_dev. arp_dev é uma string terminada em
zero que nomeia um dispositivo.
+------------------------------------------+
| arp_flags |
+----------------+-------------------------+
|flag | significado |
+----------------+-------------------------+
|ATF_COM | Busca completada |
+----------------+-------------------------+
|ATF_PERM | Mantém entrada |
+----------------+-------------------------+
|ATF_PUBL | Publica entrada |
+----------------+-------------------------+
|ATF_USETRAILERS | Trailers requeridos |
+----------------+-------------------------+
|ATF_NETMASK | Usa uma máscara de rede |
+----------------+-------------------------+
|ATF_DONTPUB | Não responde |
+----------------+-------------------------+
Se o flag ATF_NETMASK é selecionado, então arp_netmask deveria ser
válido. O Linux 2.2 não suporta entradas entradas ARP de rede proxy,
então deveria ser setado para 0xffffffff, ou 0 para remover uma entrada
de proxy arp existente. ATF_USETRAILERS é obsoleto e não deveria ser
usado.
SYSCTLS
O ARP suporta uma interface de sysctl para configurar parâmetros em uma
base global ou por interface. Os sysctls podem ser acessados por
leitura ou escrita dos arquivos /proc/sys/net/ipv4/neigh/*/* ou com a
interface sysctl(2) /proc/sys/net/ipv4/neigh/. A configuração no
diretório ‘default’ é usada por todos os dispositivos recém-criados. A
menos que se especifique o contrário, sysctls relacionados a tempo são
especificados em segundos.
anycast_delay
O número máximo de jiffies para atraso antes de uma resposta a
uma mensagem de solicitação de vizinhança IPv6. Suporte a
anycast ainda não foi implementado. O padrão é 1 segundo.
app_solicit
O número máximo de testes para envio ao daemon ARP do espaço de
usuário, via netlink, antes de voltar aos testes de multicast
(veja mcast_solicit). O padrão é 0.
base_reachable_time
Uma vez que um vizinho foi encontrado, a entrada é considerada
válida pelo menos por um valor aleatório entre
base_reachable_time/2 e 3*base_reachable_time/2. Uma validação
da entrada será estendida se ele receber feedback positivo de
protocolos de nível mais alto. O padrão é de 30 segundos.
delay_first_probe_time
Atraso antes do primeiro teste, depois que ele decidiu que um
vizinho está travado. O padrão é de 5 segundos.
gc_interval
Quão freqüentemente o coletor de lixo para entradas vizinhas
deveria tentar rodar. O padrão é de 30 segundos.
gc_stale_time
Determina a freqüência da checagem por entradas de vizinhos
travados. Quando uma entrada de vizinho é considerada travada,
é resolvido novamente antes de enviar dados para ele. O padrão
é de 60 segundos.
gc_thresh1
O número mínimo de entradas a serem mantidas no cache ARP. O
coletor de lixo não rodará se houver menos do que este número de
entradas no cache. O padrão é de 128.
gc_thresh2
O número máximo flexível de entradas a serem mantidas no cache
ARP. O coletor de lixo permitirá que o número de entradas exceda
este número por 5 segundos antes que a coleta seja realizada. O
padrão é de 512.
gc_thresh3
O número máximo rígido de entradas a serem mantidas no cache
ARP. O coletor de lixo sempre rodará se houver mais que este
número de entradas no cache. O padrão é de 1024.
locktime
O número mínimo de jiffies a manter uma entrada ARP no cache.
Isto previne o esmagamento do cache ARP se houver mais que um
mapeamento potencial (geralmente devido a desconfiguração de
rede). O padrão é de 1 segundo.
mcast_solicit
O número máximo de tentativas para resolver um endereço por
multicast/broadcast antes de marcar a entrada como não
alcançável. O padrão é de 3.
proxy_delay
Quando é recebido um pedido ARP de um endereço proxy-ARP
conhecido, atrasa até proxy_delay jiffies antes de responder.
Isto é usado para prevenir flooding (enxurrada) na rede em
alguns casos. O padrão é de 0.8 segundos.
proxy_qlen
O número máximo de pacotes que podem ser enfileirados em
endereços proxy-ARP. O padrão é de 64.
retrans_time
O número de jiffies de atraso antes de se retransmitir um
pedido. O padrão é de 1 segundo.
ucast_solicit
O número máximo de tentativas de enviar testes de unicast antes
de perguntar ao daemon ARP (veja app_solicit). O padrão é 3.
unres_qlen
O número máximo de pacotes que podem ser enfileirados para cada
endereço não resolvido por outras camadas da rede. O padrão é
de 3.
PROBLEMAS
Algumas configurações de temporização são específicos em jiffies, que
são relacionados com a arquitetura. No Alpha, um jiffy é 1/1024
segundo, em muitas outras arquiteturas é 1/100s.
Não há maneira de sinalizar feedback positivo a partir do espaço do
usuário. Isto significa que protocolos orientados a conexão
implementados no espaço de usuário gerarão um tráfego ARP excessivo,
porque ndisc retestará regularmente o endereço MAC. O mesmo problema
se aplica para a implementação do NFS no kernel.
Esta página de manual busca tanto a funcionalidade específica para IPv4
quanto a compartilhada entre IPv4 e IPv6.
VERSÕES
O struct arpreq mudou no Linux 2.0 para incluir o membro arp_dev e os
números de ioctl mudaram ao mesmo tempo. O suporte aos ioctls antigos
foi tirado do Linux 2.2.
O suporte a entradas de arp proxy para redes (máscara de rede diferente
de 0xffffffff) foi eliminado no Linux 2.2. Ele é substituído pela
configuração automática pelo kernel do arp proxy para todos os hosts
alcancáveis em outras interfaces (quando o repasse e o arp proxy
estiverem habilitados para a interface).
VEJA TAMBÉM
ip(7)
RFC826 para uma descrição do ARP.
RFC2461 para uma descrição da descoberta de vizinhos IPv6 e os
algoritmos-base usados.
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)