Scroll to navigation

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

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):

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.

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.

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!

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

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

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.

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

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)

30/04/1999 Página do Manual Linux