Provided by: manpages-pt-br_4.22.0-1_all
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 IFLA_PERM_ADDRESS ender. de hardware hardware address provided by device (since Linux 5.5) 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; /* Interface index */ __u16 ndm_state; /* State */ __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 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
cmsg(3), rtnetlink(3), ip(7), netlink(7)
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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-portuguese@lists.debian.org⟩.