Provided by: manpages-pt_20040726-2_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                 Estatísticas de interface.
                                        net_device_stats

       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)