Provided by: manpages-pt_20040726-5_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)

Página do Manual Linux                             30/04/1999                                       RTNETLINK(7)