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)