Scroll to navigation

RTNETLINK(7) Manual do Programador do Linux RTNETLINK(7)

NOME

rtnetlink - '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(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):

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 broadcast L2.
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 estatísticas

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

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; /* Address type */
unsigned char ifa_prefixlen; /* Prefixlength of address */
unsigned char ifa_flags; /* Address flags */
unsigned char ifa_scope; /* Address scope */
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.
Create, remove or receive information about a network route. These messages contain an rtmsg structure with an optional sequence of rtattr structures following. For RTM_GETROUTE, setting rtm_dst_len and rtm_src_len to 0 means you get all entries for the specified routing table. For the other fields, except rtm_table and rtm_protocol, 0 is the wildcard.
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 */
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 índice-interface de entrada
RTA_OIF int índice-interface de saída
RTA_GATEWAY ender. 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!

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; /* índice da interface */
__u16 ndm_state; /* estado */
__u8 ndm_flags; /* sinalizadores */
__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'

If the rta_type field is NDA_CACHEINFO, then a struct nda_cacheinfo header follows

Add, delete or retrieve a routing rule. Carries a struct rtmsg
Add, remove or get a queueing discipline. The message contains a struct tcmsg and may be followed by a series of attributes.
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.

Add, remove or get a traffic class. These messages contain a struct tcmsg as described above.
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)

COLOFÃO

Esta página faz parte da versão 4.16 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.

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 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.

15 setembro 2017 Linux