Provided by: manpages-pt_20040726-4_all bug

NOME

       rtnetlink, NETLINK_ROUTE - socket Linux de roteamento IPv4.

SINOPSE

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

       rtnetlink_socket = socket(PF_NETLINK, int socket_type, NETLINK_ROUTE);

DESCRIÇÃO

       Rtnetlink permite que as tabelas de roteamento do kernel sejam lidas e alteradas.  É usado
       dentro do kernel para a comunicação entre vários subsistemas, apesar de que seu uso não  é
       documentado  aqui,  e para comunicação com programas do espaço do usuário.  Rotas de rede,
       endereços ip, parâmetros de ligação, configurações de vizinhança,  disciplinas  de  filas,
       classes  de  tráfego  e  classificadores de pacotes podem todos ser controlados através de
       sockets NETLINK_ROUTE.  Ele é baseado em mensagens  de  "netlink",  veja  netlink(7)  para
       maiores informações.

ATRIBUTOS DE ROTEAMENTO

       Algumas mensagens do rnetlink têm atributos opcionais depois do cabeçalho inicial:

       struct rtattr
       {
           unsigned short rta_len;     /* Comprimento da opção */
           unsigned short rta_type;    /* Tipo da opção */
           /* Dados seguem */
       };

       Estes atributos seriam manipulados somente pelo uso de macros RTA_* ou do libnetlink, veja
       rtnetlink(3).

MENSAGENS

       Rtnetlink consiste nos  seguintes  tipos  de  mensagens  (além  das  mensagens  padrão  do
       netlink):

       RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK
              Cria,  remove  ou  obtém informações sobre uma interface de rede específica.  Essas
              mensagens contêm uma estrutura ifinfomsg seguida por uma série de estruturas rtattr

              struct ifinfomsg
              {
                  unsigned char  ifi_family;  /* AF_UNSPEC */
                  unsigned char  __ifi_pad;   /* não usado */
                  unsigned short ifi_type;    /* tipo de dispositivo */
                  int            ifi_index;   /* índice da interface */
                  unsigned int   ifi_flags;   /* flags do dispositivo  */
                  unsigned int   ifi_change;  /* muda a máscara */
              };

              ifi_flags contém as flags do dispositivo, veja netdevice(7); ifi_index  é  o  único
              índice  de  interface,  ifi_change  é  reservado  para uso futuro e deve sempre ser
              setado em 0xFFFFFFFF.

              Atributos de roteamento
              rta_type                  tipo de valor             descrição
              ────────────────────────────────────────────────────────────────────────────────
              IFLA_UNSPEC               -                         não-especificado.
              IFLA_ADDRESS              endereço de hardware      endereço L2 da interface.
              IFLA_BROADCAST            endereço de hardware      endereço de broadcast L2.
              IFLA_IFNAME               string asciiz             Nome do dispositivo.
              IFLA_MTU                  unsigned int              MTU do dispositivo.
              IFLA_LINK                 int                       Tipo de ligação.
              IFLA_QDISC                string asciiz             Disciplina de fila.
              IFLA_STATS                struct net_device_stats   Estatísticas de interface.

       RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
              Acrescenta, remove ou recebe informação  sobre  um  endereço  IP  associado  a  uma
              interface.  No  Linux 2.2, uma interface pode carregar múltiplos endereços IP, isso
              substitui o conceito de  apelido  de  dispositivo  no  2.0.  No  Linux  2.2,  essas
              mensagens  suportam  endereços  IPv4  e IPv6. Elas contêm uma estrutura ifaddrmsg ,
              opcionalmente seguida pelos atributos de roteamento rtaddr

              struct ifaddrmsg
              {
                  unsigned char  ifa_family;  /* Tipo de endereço */
                  unsigned char  ifa_prefixlen;/* Comprimento de prefixo do endereço */
                  unsigned char  ifa_flags;   /* Flags do endereço */
                  unsigned char  ifa_scope;   /* Escopo do endereço */
                  int            ifa_index;   /* Índice da interface */
              };

              ifa_family é o tipo de família de endereço  (correntemente  AF_INET  ou  AF_INET6),
              ifa_prefixlen  é  o  comprimento da máscara do endereço, se definida para a família
              (como para o IPv4), ifa_scope é o escopo de  endereço,  ifa_index  é  o  índice  da
              interface com a qual o endereço está associado.  ifa_flags é uma palavra de flag do
              IFA_F_SECONDARY  para  endereços  secundários  (interface  dos  antigos  apelidos),
              IFA_F_PERMANENT  para um endereço permanente setado pelo usuário e outras flags não
              documentadas.

                Atributos
              rta_type        tipo de valor                  descrição
              ───────────────────────────────────────────────────────────────────────
              IFA_UNSPEC      -                              não especificado.
              IFA_ADDRESS     endereço de protocolo direto   endereço da interface.
              IFA_LOCAL       endereço de protocolo direto   endereço local.
              IFA_LABEL       string asciiz                  nome da interface.
              IFA_BROADCAST   endereço do protocolo direto   endereço de broadcast.
              IFA_ANYCAST     endereço de protocolo direto   endereço de anycast.
              IFA_CACHEINFO   struct ifa_cacheinfo           informação de endereço.

       RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
              Cria, remove ou recebe informação sobre uma rota de rede.  Essas  mensagens  contêm
              uma estrutura rtmsg com uma seqüência opcional de estruturas rtattr a seguir.

              struct rtmsg
              {
                  unsigned char  rtm_family;  /* Família de endereços da rota */
                  unsigned char  rtm_dst_len; /* Comprimento da origem */
                  unsigned char  rtm_src_len; /* Comprimento do destino */
                  unsigned char  rtm_tos;     /* filtro TOS */

                  unsigned char  rtm_table;   /* id da tabela de roteamento */
                  unsigned char  rtm_protocol;/* protocolo de roteamento; veja abaixo */
                  unsigned char  rtm_scope;   /* veja abaixo */
                  unsigned char  rtm_type;    /* veja abaixo */

                  unsigned int   rtm_flags;
              };

              rtm_type          Tipo de rota
              ─────────────────────────────────────────────────────────────────
              RTN_UNSPEC        rota desconhecida
              RTN_UNICAST       um gateway ou rota direta
              RTN_LOCAL         uma rota de interface local
              RTN_BROADCAST     uma  rota  de broadcast local (enviado como um
                                broadcast)
              RTN_ANYCAST       uma rota de broadcast local (enviado  como  um
                                unicast)
              RTN_MULTICAST     uma rota de multicast
              RTN_BLACKHOLE     uma rota de perda de pacotes
              RTN_UNREACHABLE   um destino não alcançável
              RTN_PROHIBIT      uma rota de rejeição de pacotes
              RTN_THROW         continua a busca de roteamento em outra tabela
              RTN_NAT           uma regra de tradução de endereço de rede
              RTN_XRESOLVE      refere-se   a   um   resolvedor  externo  (não
                                implementado)

              rtm_protocol      Origem da rota.
              ───────────────────────────────────────────────────
              RTPROT_UNSPEC     desconhecida
              RTPROT_REDIRECT   por um redirecionamento de  ICMP
                                (não usado correntemente)
              RTPROT_KERNEL     pelo kernel
              RTPROT_BOOT       durante a inicialização
              RTPROT_STATIC     pelo administrador

              Valores  maiores  que  RTPROT_STATIC  não  são  interpretados pelo kernel, eles são
              apenas para informação do usuário. Eles podem ser usados para marcar  a  origem  de
              uma  informação  de  roteamento  ou  para  distinguir  entre  múltiplos  daemons de
              roteamento.  Veja  <linux/rtnetlink.h>  para  os  identificadores  de  daemons   de
              roteamento que já são atribuídos.

              rtm_scope é a distância ao destino:

              RT_SCOPE_UNIVERSE   rota global
              RT_SCOPE_SITE       rota    interior    no   sistema
                                  autônomo local
              RT_SCOPE_LINK       rota nesta ligação
              RT_SCOPE_HOST       rota no host local
              RT_SCOPE_NOWHERE    destino não existe

              Os valores entre RT_SCOPE_UNIVERSE e RT_SCOPE_SITE são disponíveis para o usuário.

              O rtm_flags tem os seguintes significados:

              RTM_F_NOTIFY     se a rota muda, notifica o usuário via rtnetlink
              RTM_F_CLONED     a rota é clonada a partir de outra rota
              RTM_F_EQUALIZE   um equalizador de multicast (ainda não implementado)

              rtm_table especifica a tabela de roteamento

              RT_TABLE_UNSPEC    uma tabela de roteamento não especificada
              RT_TABLE_DEFAULT   a tabela padrão
              RT_TABLE_MAIN      a tabela principal
              RT_TABLE_LOCAL     a tabela local

              O   usuário   pode   atribuir   valores   arbitrários   entre   RT_TABLE_UNSPEC   e
              RT_TABLE_DEFAULT.

                Atributos
              rta_type        tipo de valor           descrição
              ────────────────────────────────────────────────────────────────────────
              RTA_UNSPEC      -                       ignorado.
              RTA_DST         endereço do protocolo   endereço de destino da rota.
              RTA_SRC         endereço do protocolo   endereço da origem da rota.
              RTA_IIF         int                     índice da interface de entrada.
              RTA_OIF         int                     índice da interface de saída.
              RTA_GATEWAY     endereço do protocolo   o gateway da rota
              RTA_PRIORITY    int                     prioridade da rota.
              RTA_PREFSRC
              RTA_METRICS     int                     métrica da rota.
              RTA_MULTIPATH
              RTA_PROTOINFO
              RTA_FLOW
              RTA_CACHEINFO

              Preencha esses valores!

       RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
              Acrescenta,  remove  ou recebe informação sobre uma entrada de tabela de vizinhança
              (por exemplo, uma entrada ARP). A mensagem contém uma estrutura ndmsg

              struct ndmsg
              {
                  unsigned char  ndm_family;
                  unsigned char  ndm_pad1;
                  unsigned short ndm_pad2;
                  int            ndm_ifindex; /* índice da interface */
                  __u16          ndm_state;   /* estado */
                  __u8           ndm_flags;   /* flags */
                  __u8           ndm_type;
              };

              struct nda_cacheinfo
              {
                  __u32          ndm_confirmed;
                  __u32          ndm_used;
                  __u32          ndm_updated;
                  __u32          ndm_refcnt;
              };

              ndm_state é uma máscara de bits dos seguintes estados:

              NUD_INCOMPLETE   uma entrada de cache resolvendo correntemente
              NUD_REACHABLE    uma entrada de cache confirmada funcionando
              NUD_STALE        uma entrada expirada do cache
              NUD_DELAY        uma entrada aguardando por um temporizador
              NUD_PROBE        uma entrada de cache que é retestada atualmente
              NUD_FAILED       uma entrada de cache inválida
              NUD_NOARP        um dispositivo sem cache de destino
              NUD_PERMANENT    uma entrada estática

              Os ndm_flags válidos são:

              NTF_PROXY    uma entrada de arp do proxy
              NTF_ROUTER   um roteador IPv6

              documenta melhor os membros da estrutura

              A estrutura rtaddr tem os seguintes significados para o campo rta_type :

              NDA_UNSPEC      tipo desconhecido
              NDA_DST         um endereço de destino vizinho da camada de rede do cache
              NDA_LLADDR      um endereço vizinho da camada de ligação do cache
              NDA_CACHEINFO   estatísticas do cache

              Se o campo rta_type é NDA_CACHEINFO , então segue o cabeçalho struct nda_cacheinfo

       RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE
              Acrescenta, apaga ou recupera uma regra de roteamento. Carrega um struct rtmsg

       RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
              Acrescenta, remove ou obtém uma disciplina de fila. A  mensagem  contém  um  struct
              tcmsg e pode ser seguida por uma série de atributos.

              struct tcmsg
              {
                  unsigned char  tcm_family;
                  unsigned char  tcm__pad1;
                  unsigned short tcm__pad2;
                  int            tcm_ifindex; /* índice de interface */
                  __u32          tcm_handle;  /* manipula Qdisc */
                  __u32          tcm_parent;  /* qdisc pai */
                  __u32          tcm_info;
              };

               Atributos
              rta_type      tipo de valor         Descrição
              ───────────────────────────────────────────────────────────────────────────
              TCA_UNSPEC    -                     não especificado.
              TCA_KIND      string asciiz         nome da disciplina de fila.
              TCA_OPTIONS   seqüência de bytes    seguem as opções específicas do qdisc.
              TCA_STATS     struct tc_stats       estatísticas do qdisc.
              TCA_XSTATS    qdisc specific        estatísticas específicas do módulo.
              TCA_RATE      struct tc_estimator   limite de taxa.

              Além  desses,  são permitidos vários outros atributos específicos de módulos qdisc.
              Para maiores informações, veja os arquivos de inclusão apropriados.

       RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS
              Acrescenta, remove ou obtém uma classe de tráfego. Essas mensagens contêm um struct
              tcmsg como descrito acima.

       RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER
              Acrescenta,  remove  ou  recebe  informações  sobre  um  filtro  de  tráfego. Essas
              mensagens contém um struct tcmsg como descrito acima.

VERSÕES

       rtnetlink é uma nova implementação do Linux 2.2.

BUGS

       Este página de manual é falha e imcompleta.

VEJA TAMBÉM

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

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)