RTNETLINK(7) | Manual do Programador do Linux | RTNETLINK(7) |
NOME¶
rtnetlink - '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(AF_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 */
/* Seguem os Dados */ };
Estes atributos seriam manipulados somente pelo uso de macros RTA_* ou do libnetlink, veja rtnetlink(3).
Messages¶
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 short ifi_type; /* Device type */
int ifi_index; /* Interface index */
unsigned int ifi_flags; /* Device flags */
unsigned int ifi_change; /* change mask */ }; - ifi_flags contains the device flags, see netdevice(7);
ifi_index is the unique interface index (since Linux 3.7, it is
possible to feed a nonzero value with the RTM_NEWLINK message, thus
creating a link with the given ifindex); ifi_change is
reserved for future use and should be always set to 0xFFFFFFFF.
Atributos de roteamento rta_type tipo de valor descrição IFLA_UNSPEC - não-especificado IFLA_ADDRESS ender. de hardware interface L2 address IFLA_BROADCAST ender. de hardware broadcast L2. IFLA_IFNAME cadeia asciiz Nome do dispos. IFLA_MTU int. sem sinal MTU do dispos. IFLA_LINK int Tipo de ligação. IFLA_QDISC cadeia asciiz Disciplina de fila IFLA_STATS see below estatísticas
The value type for IFLA_STATS is struct rtnl_link_stats (struct net_device_stats in Linux 2.4 and earlier).
- 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; /* Address type */
unsigned char ifa_prefixlen; /* Prefixlength of address */
unsigned char ifa_flags; /* Address flags */
unsigned char ifa_scope; /* Address scope */
int ifa_index; /* Interface index */ }; - ifa_family is the address family type (currently AF_INET or
AF_INET6), ifa_prefixlen is the length of the address mask
of the address if defined for the family (like for IPv4), ifa_scope
is the address scope, ifa_index is the interface index of the
interface the address is associated with. ifa_flags is a flag word
of IFA_F_SECONDARY for secondary address (old alias interface),
IFA_F_PERMANENT for a permanent address set by the user and other
undocumented flags.
Atributos rta_type tipo de valor descrição IFA_UNSPEC - não-especificado IFA_ADDRESS ender. de protocolo direto ender. da interface IFA_LOCAL ender. de protocolo direto ender. local IFA_LABEL cadeia asciiz nome da interface IFA_BROADCAST ender. de protocolo direto ender. de broadcast IFA_ANYCAST ender. de protocolo direto ender. de anycast IFA_CACHEINFO struct ifa_cacheinfo Informação de ender.
- RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
- Create, remove or receive information about a network route. These messages contain an rtmsg structure with an optional sequence of rtattr structures following. For RTM_GETROUTE, setting rtm_dst_len and rtm_src_len to 0 means you get all entries for the specified routing table. For the other fields, except rtm_table and rtm_protocol, 0 is the wildcard.
-
struct rtmsg {
unsigned char rtm_family; /* Address family of route */
unsigned char rtm_dst_len; /* Length of destination */
unsigned char rtm_src_len; /* Length of source */
unsigned char rtm_tos; /* TOS filter */
unsigned char rtm_table; /* Routing table ID */
unsigned char rtm_protocol; /* Routing protocol; see below */
unsigned char rtm_scope; /* See below */
unsigned char rtm_type; /* See below */
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 atualmente) 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 a multipath equalizer (not yet implemented) 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 ender. do protocolo ender. de destino da rota RTA_SRC ender. do protocolo ender. da origem da rota RTA_IIF int índice-interface de entrada RTA_OIF int índice-interface de saída RTA_GATEWAY ender. 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;
int ndm_ifindex; /* índice da interface */
__u16 ndm_state; /* estado */
__u8 ndm_flags; /* sinalizadores */
__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 atualmente resolvida de 'cache' NUD_REACHABLE uma entrada confirmada de 'cache' 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 A estrutura rtaddr tem os seguintes significados para o campo rta_type:
NDA_UNSPEC tipo desconhecido NDA_DST a neighbor cache n/w layer destination address NDA_LLADDR ender. vizinho da camada de ligação do 'cache' NDA_CACHEINFO estatísticas do 'cache' If the rta_type field is NDA_CACHEINFO, then a struct nda_cacheinfo header follows
- RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE
- Add, delete or retrieve a routing rule. Carries a struct rtmsg
- RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
- Add, remove or get a queueing discipline. The message contains a struct tcmsg and may be followed by a series of attributes.
-
struct tcmsg {
unsigned char tcm_family;
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 cadeia asciiz nome da disciplina de fila TCA_OPTIONS seqüência de bytes Opções específicas do qdisc TCA_STATS struct tc_stats estatísticas do qdisc TCA_XSTATS qdisc-specific Module-specific statistics. 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
- Add, remove or get a traffic class. These messages contain a struct tcmsg as described above.
- 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 é imcompleta.
VEJA TAMBÉM¶
COLOFÃO¶
Esta página faz parte da versão 4.16 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.
TRADUÇÃO¶
A tradução para português brasileiro desta página man foi criada por Rubens de Jesus Nogueira <darkseid99@usa.net> e André Luiz Fassone <lonely_wolf@ig.com.br>
Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.
Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores.
15 setembro 2017 | Linux |