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)