.\" -*- nroff -*- .\" Don't remove the line above, it tells man that tbl is needed. .\" This man page is Copyright (C) 1999 Andi Kleen . .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" Based on the original comments from Alexey Kuznetsov, writen with .\" help from Matthew Wilcox. .\" $Id: rtnetlink.7,v 1.1 2000/10/20 13:05:11 ricardo Exp $ .TH RTNETLINK 7 "30/04/1999" "Página do Manual Linux" "Manual do Programador Linux" .SH NOME rtnetlink, NETLINK_ROUTE \- socket Linux de roteamento IPv4. .SH SINOPSE .B #include .br .B #include .br .B #include .br .B #include .BI "rtnetlink_socket = socket(PF_NETLINK, int " socket_type ", NETLINK_ROUTE);" .SH 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 .B NETLINK_ROUTE. Ele é baseado em mensagens de "netlink", veja .BR netlink (7) para maiores informações. .\" XXX: all these macros could be moved to rtnetlink(3) .SH ATRIBUTOS DE ROTEAMENTO Algumas mensagens do rnetlink têm atributos opcionais depois do cabeçalho inicial: .nf .ta 4 19 32 struct rtattr { unsigned short rta_len; /* Comprimento da opção */ unsigned short rta_type; /* Tipo da opção */ /* Dados seguem */ }; .fi Estes atributos seriam manipulados somente pelo uso de macros RTA_* ou do libnetlink, veja .BR rtnetlink (3). .SH MENSAGENS Rtnetlink consiste nos seguintes tipos de mensagens (além das mensagens padrão do netlink): .TP .BR 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 .B ifinfomsg seguida por uma série de estruturas .B rtattr . .nf .ta 4 19 32 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 */ }; .fi .\" XXX ifi_type .B ifi_flags contém as flags do dispositivo, veja .BR netdevice(7); .B ifi_index é o único índice de interface, .B ifi_change é reservado para uso futuro e deve sempre ser setado em 0xFFFFFFFF. .TS tab(:); c l l l. 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:T{ struct net_device_stats T}:Estatísticas de interface. .TE .TP .BR 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 .B ifaddrmsg , opcionalmente seguida pelos atributos de roteamento .B rtaddr . .nf .ta 4 19 32 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 */ }; .fi .B ifa_family é o tipo de família de endereço (correntemente .B AF_INET ou .B AF_INET6), .B ifa_prefixlen é o comprimento da máscara do endereço, se definida para a família (como para o IPv4), .B ifa_scope é o escopo de endereço, .B ifa_index é o índice da interface com a qual o endereço está associado. .B ifa_flags é uma palavra de flag do .B IFA_F_SECONDARY para endereços secundários (interface dos antigos apelidos), .B IFA_F_PERMANENT para um endereço permanente setado pelo usuário e outras flags não documentadas. .TS tab(:); c l l l. 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. .TE .\" XXX struct ifa_cacheinfo .TP .BR RTM_NEWROUTE ", " RTM_DELROUTE ", " RTM_GETROUTE Cria, remove ou recebe informação sobre uma rota de rede. Essas mensagens contêm uma estrutura .B rtmsg com uma seqüência opcional de estruturas .B rtattr a seguir. .nf .ta 4 19 32 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; }; .fi .TS tab(:); l l l l. 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:T{ uma rota de broadcast local (enviado como um broadcast) T} RTN_ANYCAST:T{ uma rota de broadcast local (enviado como um unicast) T} 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:T{ refere-se a um resolvedor externo (não implementado) T} .TE .TS tab(:); l l. rtm_protocol:Origem da rota. _ RTPROT_UNSPEC:desconhecida RTPROT_REDIRECT:T{ por um redirecionamento de ICMP (não usado correntemente) T} RTPROT_KERNEL:pelo kernel RTPROT_BOOT:durante a inicialização RTPROT_STATIC:pelo administrador .TE Valores maiores que .B 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 .BR para os identificadores de daemons de roteamento que já são atribuídos. .B rtm_scope é a distância ao destino: .TS tab(:); l l. RT_SCOPE_UNIVERSE:rota global RT_SCOPE_SITE:T{ rota interior no sistema autônomo local T} RT_SCOPE_LINK:rota nesta ligação RT_SCOPE_HOST:rota no host local RT_SCOPE_NOWHERE:destino não existe .TE Os valores entre .B RT_SCOPE_UNIVERSE e .B RT_SCOPE_SITE são disponíveis para o usuário. O .B rtm_flags tem os seguintes significados: .TS tab(:); l l. RTM_F_NOTIFY:T{ se a rota muda, notifica o usuário via rtnetlink T} RTM_F_CLONED:a rota é clonada a partir de outra rota RTM_F_EQUALIZE:um equalizador de multicast (ainda não implementado) .TE .B rtm_table especifica a tabela de roteamento .TS tab(:); l l. 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 .TE O usuário pode atribuir valores arbitrários entre .B RT_TABLE_UNSPEC e .BR RT_TABLE_DEFAULT . .TS tab(:); c l l l. 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:: .TE .B Preencha esses valores! .TP .BR 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 .B ndmsg . .nf .ta 4 19 32 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; }; .fi .B ndm_state é uma máscara de bits dos seguintes estados: .TS tab(:); l l. 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 .TE Os .B ndm_flags válidos são: .TS tab(:); l l. NTF_PROXY:uma entrada de arp do proxy NTF_ROUTER:um roteador IPv6 .TE .B documenta melhor os membros da estrutura A estrutura .B rtaddr tem os seguintes significados para o campo .B rta_type : .TS tab(:); l l. 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 .TE Se o campo .B rta_type é .B NDA_CACHEINFO , então segue o cabeçalho .B struct nda_cacheinfo .TP .BR RTM_NEWRULE ", " RTM_DELRULE ", " RTM_GETRULE Acrescenta, apaga ou recupera uma regra de roteamento. Carrega um .B struct rtmsg .TP .BR RTM_NEWQDISC ", " RTM_DELQDISC ", " RTM_GETQDISC Acrescenta, remove ou obtém uma disciplina de fila. A mensagem contém um .B struct tcmsg e pode ser seguida por uma série de atributos. .nf .ta 4 19 32 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; }; .fi .TS tab(:); c l l l. 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. .TE 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. .TP .BR RTM_NEWTCLASS ", " RTM_DELTCLASS ", " RTM_GETTCLASS Acrescenta, remove ou obtém uma classe de tráfego. Essas mensagens contêm um .B struct tcmsg como descrito acima. .TP .BR RTM_NEWTFILTER ", " RTM_DELTFILTER ", " RTM_GETTFILTER Acrescenta, remove ou recebe informações sobre um filtro de tráfego. Essas mensagens contém um .B struct tcmsg como descrito acima. .SH VERSÕES .B rtnetlink é uma nova implementação do Linux 2.2. .SH BUGS Este página de manual é falha e imcompleta. .SH VEJA TAMBÉM .BR netlink (7), .BR cmsg (3), .BR ip (7), .BR rtnetlink (3) .SH TRADUZIDO POR LDP-BR em 21/08/2000. \&\fR\&\f(CWRubens de Jesus Nogueira (tradução)\fR \&\fR\&\f(CWAndré L. Fassone Canova (revisão)\fR