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