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)