Provided by: manpages-pt_20040726-4_all
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)