| rtnetlink(7) | Miscellaneous Information Manual | rtnetlink(7) |
rtnetlink - Linux routing socket
#include <asm/types.h> #include <linux/if_link.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <sys/socket.h>
rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);
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.
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).
Rtnetlink consiste nos seguintes tipos de mensagens (além das mensagens padrão do netlink):
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 */
};
| 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 | L2 broadcast address |
| 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 | Interface Statistics |
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 */
unsigned int ifa_index; /* Interface index */
};
| 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. |
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;
see RTA_TABLE below */
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.
| 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.
| 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 | Input interface index |
| RTA_OIF | int | Output interface index |
| RTA_GATEWAY | ender. do protocolo | o gateway da rota |
| RTA_PRIORITY | int | Prioridade da rota |
| RTA_PREFSRC | ender. do protocolo | Preferred source address |
| RTA_METRICS | int | métrica da rota |
| RTA_MULTIPATH | Multipath nexthop data br (see below). | |
| RTA_PROTOINFO | No longer used | |
| RTA_FLOW | int | Route realm |
| RTA_CACHEINFO | struct rta_cacheinfo | (veja também linux/rtnetlink.h) |
| RTA_SESSION | No longer used | |
| RTA_MP_ALGO | No longer used | |
| RTA_TABLE | int | Routing table ID; if set, rtm_table é ignorado |
| RTA_MARK | int | |
| RTA_MFC_STATS | struct rta_mfc_stats | (veja também linux/rtnetlink.h) |
| RTA_VIA | struct rtvia | Gateway in different AF (see below) |
| RTA_NEWDST | ender. do protocolo | Change packet destination address |
| RTA_PREF | char | RFC4191 IPv6 router preference (see below) |
| RTA_ENCAP_TYPE | short | Encapsulation type for lwtunnels (see below) |
| RTA_ENCAP | Defined by RTA_ENCAP_TYPE | |
| RTA_EXPIRES | int | Expire time for IPv6 routes (in seconds) |
struct rtnexthop {
unsigned short rtnh_len; /* Length of struct + length
of RTAs */
unsigned char rtnh_flags; /* Flags (see
linux/rtnetlink.h) */
unsigned char rtnh_hops; /* Nexthop priority */
int rtnh_ifindex; /* Interface index for this
nexthop */
}
struct rtvia {
unsigned short rtvia_family;
unsigned char rtvia_addr[0];
};
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;
};
| 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' |
Se o campo rta_type é NDA_CACHEINFO, então segue o cabeçalho struct nda_cacheinfo
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.
rtnetlink é uma nova implementação do Linux 2.2.
Este página de manual é imcompleta.
cmsg(3), rtnetlink(3), ip(7), netlink(7)
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 dezembro 2022 | Linux man-pages 6.03 |