Provided by: manpages-pt_20040726-4_all bug

NOME

       netlink, PF_NETLINK - Comunicação entre o kernel e o usuário.

SINOPSE

       #include <asm/types.h>
       #include <sys/socket.h>
       #include <linux/netlink.h>

       netlink_socket = socket(PF_NETLINK, socket_type, netlink_family);

DESCRIPTION

       Netlink  é  usado para transferir informação entre módulos do kernel e processos do espaço
       do usuário.  Consiste de uma interface  padrão  baseada  em  sockets,  para  processos  de
       usuário  e  uma  API  interna  do kernel para módulos. A interface interna do kernel não é
       documentada nesta página  do  manual.  Há  também  uma  interface  netlink  obsoleta,  via
       dispositivos de caracteres netlink, esta interface não é documentada aqui e só é fornecida
       para retro-compatibilidade.

       Netlink é um serviço orientado a datagrama. Tanto SOCK_RAW quanto SOCK_DGRAM  são  valores
       válidos  para  socket_type;  porém,  o  protocolo netlink não distingue entre datagramas e
       sockets diretos.

       netlink_family seleciona o módulo do kernel ou grupo de netlink  para  se  comunicar.   As
       famílias de netlink atribuídas atualmente são:

       NETLINK_ROUTE
              Recebe  atualizações  de  roteamento  e  pode  ser usado para modificar a tabela de
              roteamento IPv4 (veja rtnetlink(7)).

       NETLINK_FIREWALL
              Recebe pacotes enviados pelo código do firewall IPv4.

       NETLINK_ARPD
              Para gerenciamento da tabela arp no espaço do usuário.

       NETLINK_ROUTE6
              Recebe e envia atualizações da tabela de roteamento IPv6.

       NETLINK_IP6_FW
              recebe pacotes que falharam  nas  checagens  do  firewall  IPv6  (não  implementado
              correntemente).

       NETLINK_TAPBASE...NETLINK_TAPBASE+15
              são  as  instâncias  do  dispositivo ethertap.  Ethertap é um pseudo-dispositivo de
              túnel de rede que permite a um driver ethernet ser simulado a partir do  espaço  do
              usuário.

       NETLINK_SKIP
              Reservado para ENskip.

       NETLINK_USERSOCK
              é reservado para futuros protocolos do espaço do usuário.

       Mensagens  do  netlink  consistem  de  uma  seqüência de bytes com um ou vários cabeçalhos
       nlmsghdr , e "payload" associado.  Para mensagens  multipartes,  o  primeiro  cabeçalho  e
       todos os seguintes têm o sinalizador NLM_F_MULTI setado, exceto pelo último cabeçalho, que
       tem o tipo NLMSG_DONE.  A seqüência de bytes deveria ser acessada somente  com  as  macros
       NLMSG_* padrões, veja netlink(3).

       Netlink  não é um protocolo confiável. Ele tenta fazer o melhor para entregar uma mensagem
       a seu(s) destinatário(s), mas pode perder mensagens quando ocorre uma condição de falta de
       memória,  ou outra. Para transferência segura, o remetente pode requerer um reconhecimento
       do receptor, através da configuração do sinalizador NLM_F_ACK.   Um  reconhecimento  é  um
       pacote  NLMSG_ERROR com o campo de erro setado para 0. A aplicação deve gerar acks para as
       próprias mensagens recebidas. O kernel tenta enviar uma mensagem NLMSG_ERROR para todos os
       pacotes falhos. Um processo de usuário também deveria seguir esta convenção.

       Cada  família  de  netlink  tem  um  conjunto de 32 grupos de multicast.  Quando bind(2) é
       chamado no socket, o campo nl_groups no sockaddr_nl deveria ser setado para uma máscara de
       bits  do  grupo  que  ele  deseja  ouvir.   O  valor  padrão para este campo é zero, o que
       significa que nenhum multicast será reebido.  Um socket  podem  realizar  o  multicast  de
       mensagens  para  qualquer um dos grupos de multicast, através da configuração de nl_groups
       para uma máscara de bits dos grupos para os quais ele  deseja  enviar,  quando  ele  chama
       sendmsg(2)  ou  executa  um  connect(2).   Somente usuários com uid efetivo igual a 0 ou a
       capabilidade CAP_NET_ADMIN  podem  enviar  ou  escutar  um  grupo  de  multicast  netlink.
       Qualquer  resposta a uma mensagem recebida de um grupo de multicast deveria ser enviada de
       volta ao pid remetente e ao grupo de multicast.

              struct nlmsghdr
              {
                  __u32    nlmsg_len;  /* Comprimento da mensagem incluindo cabeçalho */
                  __u16    nlmsg_type; /* Conteúdo da mensagem */
                  __u16    nlmsg_flags;/* Flags adicionais */
                  __u32    nlmsg_seq;  /* Número de seqüência */
                  __u32    nlmsg_pid;  /* PID de envio de processo */
              };

              struct nlmsgerr
              {
                  int      error;      /* errno negativo, ou 0 para acks. */
                  struct nlmsghdr msg; /* cabeçalho da mensagem que causou o erro */
              };

       Depois de cada nlmsghdr o "payload" se  segue.   nlmsg_type  pode  ser  um  dos  tipos  de
       mensagem padrão: NLMSG_NOOP mensagem deve ser ignorada, NLMSG_ERROR a mensagem sinaliza um
       erro e o "payload" contém  uma  estrutura  nlmsgerr  ,  NLMSG_DONE  mensagem  encerra  uma
       mensagem multiparte,

       Uma  família netlink geralmente especifica mais tipos de mensagem, veja a página de manual
       apropriada para isso, por exemplo rtnetlink(7) para NETLINK_ROUTE.

       Bits de Flag Padrão em nlmsg_flags
       NLM_F_REQUEST   setado em todas as mensagens de pedido
       NLM_F_MULTI     a mensagem é parte de uma  mensagem  multipart
                       terminada por NLMSG_DONE
       NLM_F_ACK       responde com um reconhecimento se bem-sucedido
       NLM_F_ECHO      ecoa este pedido

       Bits adicionais de flag para pedidos GET
       NLM_F_ROOT     Retorna a tabela completa em vez de uma entrada única.
       NLM_F_MATCH    Ainda não implementado.
       NLM_F_ATOMIC   Retorna um snapshot atômico da tabela.
       NLM_F_DUMP     Ainda não documentado.

       Bits adicionais de flag para pedidos NEW
       NLM_F_REPLACE   Sobrepõe objeto existente.
       NLM_F_EXCL      Não substitui se o objeto já existe.
       NLM_F_CREATE    Cria objeto se ele ainda não existe.
       NLM_F_APPEND    Acrescenta ao fim da lista de objetos.

       Note que NLM_F_ATOMIC requer CAP_NET_ADMIN ou direitos de super usuário.

FORMATOS DE ENDEREÇO

       A  estrutura  sockaddr_nl  descreve um cliente netlink no espaço do usuário no kernel.  Um
       sockaddr_nl pode ser unicast (somente envia para um peer) ou enviar para grupos de netlink
       (nl_groups diferente de 0).

              struct sockaddr_nl
              {
                  sa_family_t nl_family;    /* AF_NETLINK */
                  unsigned short nl_pad;    /* zero */
                  pid_t       nl_pid;       /* pid do processo */
                  __u32       nl_groups;    /* máscara dos grupos de multicast */
              };

       nl_pid  é  o  pid  do  netlink  do  espaço  do  usuário, ou 0 se o destino está no kernel.
       nl_groups é uma máscara de bits, com cada bit representando um número de grupo de netlink.

PROBLEMAS

       Esta página de manual não está completa.

NOTAS

       Freqüentemente é melhor usar netlink via libnetlink do que  via  interface  de  kernel  de
       baixo nível.

VERSÕES

       A interface de socket para netlink é uma realização nova no Linux 2.2

       O  Linux  2.0  suporta uma interface netlink baseada em um dispositivo mais primitivo (que
       ainda está disponível como uma opção de compatibilidade). Esta interface  obsoleta  não  é
       descrita aqui.

VEJA TAMBÉM

       cmsg(3), rtnetlink(7), netlink(3).

       ftp://ftp.inr.ac.ru/ip-routing/iproute2* para libnetlink

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)