.\" -*- nroff -*- .\" Don't change the first line, it tells man that tbl is needed. .\" This man page copyright 1998 by Andi Kleen. Subject to the GPL. .\" This manpage copyright 1998 by Andi Kleen. Subject to the GPL. .\" Based on the original comments from Alexey Kuznetsov .\" $Id: netlink.7,v 1.1 2000/10/20 13:05:11 ricardo Exp $ .TH NETLINK 7 "27/04/1999" "Página de Manual do Linux" "Manual do Programador Linux" .SH NOME netlink, PF_NETLINK \- Comunicação entre o kernel e o usuário. .SH SINOPSE .nf .\" XXX .B #include .br .B #include .br .B #include .br .PP .BI "netlink_socket = socket(PF_NETLINK, " socket_type ", " netlink_family ); .SH DESCRIPTION Netlink é usado para transferir informação entre módulos do kernel e processos do espaço do usuário. Consiste de uma interface padrão baseada em sockets, para processos de usuário e uma API interna do kernel para módulos. A interface interna do kernel não é documentada nesta página do manual. Há também uma interface netlink obsoleta, via dispositivos de caracteres netlink, esta interface não é documentada aqui e só é fornecida para retro-compatibilidade. Netlink é um serviço orientado a datagrama. Tanto .B SOCK_RAW quanto .B SOCK_DGRAM são valores válidos para .IR socket_type ; porém, o protocolo netlink não distingue entre datagramas e sockets diretos. .I netlink_family seleciona o módulo do kernel ou grupo de netlink para se comunicar. As famílias de netlink atribuídas atualmente são: .TP .B NETLINK_ROUTE Recebe atualizações de roteamento e pode ser usado para modificar a tabela de roteamento IPv4 (veja .BR rtnetlink (7)). .TP .B NETLINK_FIREWALL Recebe pacotes enviados pelo código do firewall IPv4. .TP .B NETLINK_ARPD Para gerenciamento da tabela arp no espaço do usuário. .TP .B NETLINK_ROUTE6 Recebe e envia atualizações da tabela de roteamento IPv6. .TP .B NETLINK_IP6_FW recebe pacotes que falharam nas checagens do firewall IPv6 (não implementado correntemente). .TP .BR NETLINK_TAPBASE ... NETLINK_TAPBASE+15 são as instâncias do dispositivo .B ethertap. Ethertap é um pseudo-dispositivo de túnel de rede que permite a um driver ethernet ser simulado a partir do espaço do usuário. .TP .B NETLINK_SKIP Reservado para ENskip. .TP .B NETLINK_USERSOCK é reservado para futuros protocolos do espaço do usuário. .PP Mensagens do netlink consistem de uma seqüência de bytes com um ou vários cabeçalhos .B nlmsghdr , e "payload" associado. Para mensagens multipartes, o primeiro cabeçalho e todos os seguintes têm o sinalizador .B NLM_F_MULTI setado, exceto pelo último cabeçalho, que tem o tipo .BR NLMSG_DONE . A seqüência de bytes deveria ser acessada somente com as macros .B NLMSG_* padrões, veja .BR netlink (3). Netlink não é um protocolo confiável. Ele tenta fazer o melhor para entregar uma mensagem a seu(s) destinatário(s), mas pode perder mensagens quando ocorre uma condição de falta de memória, ou outra. Para transferência segura, o remetente pode requerer um reconhecimento do receptor, através da configuração do sinalizador .B NLM_F_ACK. Um reconhecimento é um pacote .B NLMSG_ERROR com o campo de erro setado para 0. A aplicação deve gerar acks para as próprias mensagens recebidas. O kernel tenta enviar uma mensagem .B NLMSG_ERROR para todos os pacotes falhos. Um processo de usuário também deveria seguir esta convenção. Cada família de netlink tem um conjunto de 32 grupos de multicast. Quando .BR bind (2) é chamado no socket, o campo .B nl_groups no .B sockaddr_nl deveria ser setado para uma máscara de bits do grupo que ele deseja ouvir. O valor padrão para este campo é zero, o que significa que nenhum multicast será reebido. Um socket podem realizar o multicast de mensagens para qualquer um dos grupos de multicast, através da configuração de .B nl_groups para uma máscara de bits dos grupos para os quais ele deseja enviar, quando ele chama .BR sendmsg (2) ou executa um .BR connect (2). Somente usuários com uid efetivo igual a 0 ou a capabilidade .B CAP_NET_ADMIN podem enviar ou escutar um grupo de multicast netlink. Qualquer resposta a uma mensagem recebida de um grupo de multicast deveria ser enviada de volta ao pid remetente e ao grupo de multicast. .RS .nf .ta 4 13 25 struct nlmsghdr { __u32 nlmsg_len; /* Comprimento da mensagem incluindo cabeçalho */ __u16 nlmsg_type; /* Conteúdo da mensagem */ __u16 nlmsg_flags; /* Flags adicionais */ __u32 nlmsg_seq; /* Número de seqüência */ __u32 nlmsg_pid; /* PID de envio de processo */ }; struct nlmsgerr { int error; /* errno negativo, ou 0 para acks. */ struct nlmsghdr msg; /* cabeçalho da mensagem que causou o erro */ }; .ta .fi .RE Depois de cada .B nlmsghdr o "payload" se segue. .B nlmsg_type pode ser um dos tipos de mensagem padrão: .B NLMSG_NOOP mensagem deve ser ignorada, .B NLMSG_ERROR a mensagem sinaliza um erro e o "payload" contém uma estrutura .I nlmsgerr , .B NLMSG_DONE mensagem encerra uma mensagem multiparte, .\" 2.1.130 does not seem to use it. .\" .B NLMSG_OVERRUN .\" data was lost. Uma família netlink geralmente especifica mais tipos de mensagem, veja a página de manual apropriada para isso, por exemplo .BR rtnetlink (7) para .IR NETLINK_ROUTE . .TS tab(:); l s l l. Bits de Flag Padrão em nlmsg_flags NLM_F_REQUEST:setado em todas as mensagens de pedido NLM_F_MULTI:T{ a mensagem é parte de uma mensagem multipart terminada por .B NLMSG_DONE .\" XXX describe that T} NLM_F_ACK:responde com um reconhecimento se bem-sucedido NLM_F_ECHO:ecoa este pedido .TE .TS tab(:); l s l l. Bits adicionais de flag para pedidos GET NLM_F_ROOT:Retorna a tabela completa em vez de uma entrada única. NLM_F_MATCH:Ainda não implementado. NLM_F_ATOMIC:Retorna um snapshot atômico da tabela. NLM_F_DUMP:Ainda não documentado. .TE .TS tab(:); l s l l. Bits adicionais de flag para pedidos NEW NLM_F_REPLACE:Sobrepõe objeto existente. NLM_F_EXCL:Não substitui se o objeto já existe. NLM_F_CREATE:Cria objeto se ele ainda não existe. NLM_F_APPEND:Acrescenta ao fim da lista de objetos. .TE Note que NLM_F_ATOMIC requer CAP_NET_ADMIN ou direitos de super usuário. .SH FORMATOS DE ENDEREÇO A estrutura .B sockaddr_nl descreve um cliente netlink no espaço do usuário no kernel. Um sockaddr_nl pode ser unicast (somente envia para um peer) ou enviar para grupos de netlink (nl_groups diferente de 0). .RS .nf struct sockaddr_nl { sa_family_t nl_family; /* AF_NETLINK */ unsigned short nl_pad; /* zero */ pid_t nl_pid; /* pid do processo */ __u32 nl_groups; /* máscara dos grupos de multicast */ }; .fi .RE .B nl_pid é o pid do netlink do espaço do usuário, ou 0 se o destino está no kernel. .B nl_groups é uma máscara de bits, com cada bit representando um número de grupo de netlink. .\" XXX describe what that is. .SH PROBLEMAS Esta página de manual não está completa. .SH NOTAS Freqüentemente é melhor usar netlink via .B libnetlink do que via interface de kernel de baixo nível. .SH VERSÕES A interface de socket para netlink é uma realização nova no Linux 2.2 O Linux 2.0 suporta uma interface netlink baseada em um dispositivo mais primitivo (que ainda está disponível como uma opção de compatibilidade). Esta interface obsoleta não é descrita aqui. .SH VEJA TAMBÉM .BR cmsg (3), .BR rtnetlink (7), .BR netlink (3). .PP .BR ftp://ftp.inr.ac.ru/ip-routing/iproute2* para libnetlink .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