- bookworm 4.18.1-1
- bookworm-backports 4.24.0-2~bpo12+1
rtnetlink(7) | Miscellaneous Information Manual | rtnetlink(7) |
NOME¶
rtnetlink - Linux routing socket
SINOPSE¶
#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);
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 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 - 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 Linux 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 */
unsigned 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
- 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. Selecionando RTM_GETROUTE, rtm_dst_len e rtm_src_len para 0 significa que você obtém todas as entradas para a tabela de roteamento especificada. Para os outros campos, exceto rtm_table e rtm_protocol 0 é um caractere coringa.
-
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.
- 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 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) - RTA_MULTIPATH contains several packed instances of struct rtnexthop together with nested RTAs (RTA_GATEWAY):
-
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 */ }
- There exist a bunch of RTNH_* macros similar to RTA_* and NLHDR_* macros useful to handle these structures.
-
struct rtvia {
unsigned short rtvia_family;
unsigned char rtvia_addr[0]; };
- rtvia_addr is the address, rtvia_family is its family type.
- RTA_PREF may contain values ICMPV6_ROUTER_PREF_LOW, ICMPV6_ROUTER_PREF_MEDIUM, and ICMPV6_ROUTER_PREF_HIGH defined incw <linux/icmpv6.h>.
- RTA_ENCAP_TYPE may contain values LWTUNNEL_ENCAP_MPLS, LWTUNNEL_ENCAP_IP, LWTUNNEL_ENCAP_ILA, or LWTUNNEL_ENCAP_IP6 defined in <linux/lwtunnel.h>.
- 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' 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;
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
- 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 é imcompleta.
VEJA TAMBÉM¶
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 dezembro 2022 | Linux man-pages 6.03 |