rtnetlink(7)

NOME
rtnetlink - Linux routing socket

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

rtnetlink_socket = socket(AF_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 */
        /* Seguem os Dados */
    };

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

  Messages
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 short ifi_type;   /* Device type */
            int            ifi_index;  /* Interface index */
            unsigned int   ifi_flags;  /* Device flags  */
            unsigned int   ifi_change; /* change mask */
        };

    ifi_flags contains the device flags, see netdevice(7); ifi_index is the unique interface index (since Linux 3.7, it is possible to feed a nonzero value with the RTM_NEWLINK message, thus creating a link with the given ifindex); ifi_change is reserved for future use and should be always set to 0xFFFFFFFF.
    Atributos de roteamento
    rta_type | Tipo de valor | Descrição
    IFLA_UNSPEC | - | não-especificado
    IFLA_ADDRESS | ender. de hardware | interface L2 address
    IFLA_BROADCAST | ender. de hardware | L2 broadcast address
    IFLA_IFNAME | cadeia asciiz | Nome do dispos.
    IFLA_MTU | int. sem sinal | MTU do dispos.
    IFLA_LINK | int | Tipo de ligação
    IFLA_QDISC | cadeia asciiz | Disciplina de fila
    IFLA_STATS | see below | Interface Statistics
    IFLA_PERM_ADDRESS | ender. de hardware | hardware address provided by device (since Linux 5.5)

    The value type for IFLA_STATS is struct rtnl_link_stats (struct net_device_stats in Linux 2.4 and earlier).

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 Linux 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;    /* Address type */
            unsigned char ifa_prefixlen; /* Prefixlength of address */
            unsigned char ifa_flags;     /* Address flags */
            unsigned char ifa_scope;     /* Address scope */
            unsigned int  ifa_index;     /* Interface index */
        };

    ifa_family is the address family type (currently AF_INET or AF_INET6), ifa_prefixlen is the length of the address mask of the address if defined for the family (like for IPv4), ifa_scope is the address scope, ifa_index is the interface index of the interface the address is associated with. ifa_flags is a flag word of IFA_F_SECONDARY for secondary address (old alias interface), IFA_F_PERMANENT for a permanent address set by the user and other undocumented flags.
    Atributos
    rta_type | Tipo de valor | Descrição
    IFA_UNSPEC | - | não-especificado
    IFA_ADDRESS | ender. de protocolo direto | ender. da interface
    IFA_LOCAL | ender. de protocolo direto | ender. local
    IFA_LABEL | cadeia asciiz | nome da interface
    IFA_BROADCAST | ender. de protocolo direto | Ender. de broadcast
    IFA_ANYCAST | ender. de protocolo direto | ender. de anycast
    IFA_CACHEINFO | struct ifa_cacheinfo | Informação de ender.

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. Selecionando RTM_GETROUTE, rtm_dst_len e rtm_src_len para 0 significa que você obtém todas as entradas para a tabela de roteamento especificada. Para os outros campos, exceto rtm_table e rtm_protocol 0 é um caractere coringa.

        struct rtmsg {
            unsigned char rtm_family;   /* Address family of route */
            unsigned char rtm_dst_len;  /* Length of destination */
            unsigned char rtm_src_len;  /* Length of source */
            unsigned char rtm_tos;      /* TOS filter */
            unsigned char rtm_table;    /* Routing table ID;
                                           see RTA_TABLE below */
            unsigned char rtm_protocol; /* Routing protocol; see below */
            unsigned char rtm_scope;    /* See below */
            unsigned char rtm_type;     /* See below */

            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 atualmente)
    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 | a multipath equalizer (not yet implemented)

    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 | ender. do protocolo | Ender. de destino da rota
    RTA_SRC | ender. do protocolo | Ender. da origem da rota
    RTA_IIF | int | Input interface index
    RTA_OIF | int | Output interface index
    RTA_GATEWAY | ender. do protocolo | o gateway da rota
    RTA_PRIORITY | int | Prioridade da rota
    RTA_PREFSRC | ender. do protocolo | Preferred source address
    RTA_METRICS | int | métrica da rota
    RTA_MULTIPATH |  | Multipath nexthop data br (see below).
    RTA_PROTOINFO |  | No longer used
    RTA_FLOW | int | Route realm
    RTA_CACHEINFO | struct rta_cacheinfo | (veja também linux/rtnetlink.h)
    RTA_SESSION |  | No longer used
    RTA_MP_ALGO |  | No longer used
    RTA_TABLE | int | Routing table ID; if set, rtm_table é ignorado
    RTA_MARK | int |
    RTA_MFC_STATS | struct rta_mfc_stats | (veja também linux/rtnetlink.h)
    RTA_VIA | struct rtvia | Gateway in different AF (see below)
    RTA_NEWDST | ender. do protocolo | Change packet destination address
    RTA_PREF | char | RFC4191 IPv6 router preference (see below)
    RTA_ENCAP_TYPE | short | Encapsulation type for lwtunnels (see below)
    RTA_ENCAP |  | Defined by RTA_ENCAP_TYPE
    RTA_EXPIRES | int | Expire time for IPv6 routes (in seconds)

    RTA_MULTIPATH contains several packed instances of struct rtnexthop together with nested RTAs (RTA_GATEWAY):

        struct rtnexthop {
            unsigned short rtnh_len;     /* Length of struct + length
                                            of RTAs */
            unsigned char  rtnh_flags;   /* Flags (see
                                            linux/rtnetlink.h) */
            unsigned char  rtnh_hops;    /* Nexthop priority */
            int            rtnh_ifindex; /* Interface index for this
                                            nexthop */
        }

    There exist a bunch of RTNH_* macros similar to RTA_* and NLHDR_* macros useful to handle these structures.

        struct rtvia {
            unsigned short rtvia_family;
            unsigned char  rtvia_addr[0];
        };

    rtvia_addr is the address, rtvia_family is its family type.

    RTA_PREF may contain values ICMPV6_ROUTER_PREF_LOW, ICMPV6_ROUTER_PREF_MEDIUM, and ICMPV6_ROUTER_PREF_HIGH defined incw <linux/icmpv6.h>.

    RTA_ENCAP_TYPE may contain values LWTUNNEL_ENCAP_MPLS, LWTUNNEL_ENCAP_IP, LWTUNNEL_ENCAP_ILA, or LWTUNNEL_ENCAP_IP6 defined in <linux/lwtunnel.h>.

    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;
            int           ndm_ifindex;  /* Interface index */
            __u16         ndm_state;    /* State */
            __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 atualmente resolvida de 'cache'
    NUD_REACHABLE | uma entrada confirmada de 'cache' 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

    A estrutura rtaddr tem os seguintes significados para o campo rta_type:
    NDA_UNSPEC | tipo desconhecido
    NDA_DST | a neighbor cache n/w layer destination address
    NDA_LLADDR | ender. 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;
            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 | cadeia asciiz | nome da disciplina de fila
    TCA_OPTIONS | seqüência de bytes | Opções específicas do qdisc
    TCA_STATS | struct tc_stats | Estatísticas do qdisc
    TCA_XSTATS | qdisc-specific | Module-specific statistics
    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 é imcompleta.

VEJA TAMBÉM
cmsg(3), rtnetlink(3), ip(7), netlink(7)

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por Rubens de Jesus Nogueira <darkseid99@usa.net> e André Luiz Fassone <lonely_wolf@ig.com.br>

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).