Manpages

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.

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.

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;

};

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:

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_table especifica a tabela de roteamento

O usuário pode atribuir valores arbitrários entre RT_TABLE_UNSPEC e RT_TABLE_DEFAULT.

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:

Os ndm_flags válidos são:

documenta melhor os membros da estrutura

A estrutura rtaddr tem os seguintes significados para o campo rta_type :

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;

};

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 [AT] usa.net> (tradução) André L. Fassone Canova <lonelywolf [AT] blv.br> (revisão)