Famílias NetLink
O clã NetLink determina o pacote do kernel ou o conjunto de netlink para usar para comunicação. As famílias NetLink existentes designadas são as seguintes:
A interface netlink não é confiável. Faz todos os esforços para entregar as informações aos destinatários pretendidos. No entanto, se surgir um problema de armazenamento ou qualquer outro erro, pode perder as comunicações. Ao ativar a bandeira NLM F ACK, o transmissor pode pedir ao destinatário uma afirmação para garantir uma transmissão confiável. Pacotes de erro nlmsg com o campo de falha definido como 0 são reconhecimentos. Os agradecimentos por mensagens recebidas devem ser produzidas pelo próprio programa.
Para cada pacote caído, o kernel tenta dar uma resposta de erro NLMSG. Esse padrão também deve ser seguido pelos processos do usuário. De qualquer forma, é difícil transmitir os dados do kernel ao usuário de maneira confiável.
Considerando que, se o armazenamento do soquete for preenchido, o kernel não poderá transmitir uma mensagem de NetLink porque as informações serão perdidas e o núcleo com sua operação no espaço do usuário não compartilharia mais a mesma noção do status do núcleo. O aplicativo é responsável por determinar quando ocorre como resultado da falha do Enobufs que recupera (2) retorna e ressincroniza.
Exemplo:
Discutiremos um programa para usar a função netlink () para comunicação entre o kernel e os sistemas normais. Primeiro, damos uma olhada no lado do usuário deste programa. Para isso, temos que adicionar o soquete principal e os cabeçalhos do NetLink no código para fazer uso dos soquetes no programa C, juntamente com a função netlink (), i.e. “Soquete.H "e" NetLink.h ".
Depois disso, definimos o tamanho máximo da carga útil para 1024 e definimos as estruturas definidoras, eu.e. Sockaddr_nl, src_adr, dest_adr. A estrutura nula “NLMSGHDR” também é definida com “*nl” e estrutura iovec. A função principal () é iniciada com a criação de um soquete usando a função "soquete". Esta função contém o nome de domínio PF_NETLink para o soquete e o tipo de soquete Sock_raw. O protocolo de soquete netlink_test é definido nos parâmetros da função de soquete.
A função memset () é usada para apontar para o bloco "src_adr" da memória da estrutura, onde o valor 0 é definido para vários bytes que a estrutura "src_adr" contém. Usando a estrutura SRC_ADR, definimos a família, o ID do processo e os grupos do soquete específico para AF_NETLINK, ID do auto -processo e 0, respectivamente. Semelhante a uma conexão TCP/IP, o soquete estabelecido está vinculado a uma conexão local (origem) IP através da função NetLink Bind (). A função MEMSET () é novamente usada para apontar para o bloco "Dest_adr" da memória da estrutura, onde o valor 0 é definido para vários bytes que a estrutura de destino contém.
Usando a estrutura Dest_adr, atribuímos a família, o ID do processo e os grupos para o soquete de destino específico para AF_NETLINK, 0 ID do processo e 0 grupos, respectivamente. Usando a função malloc (), atribuímos a memória dinâmica para estruturar "nlmsghdr" e salvar o resultado de retorno, i i.e. conseguiu ou não. O ponteiro da estrutura nula “NL” aponta para o comprimento da mensagem, ID do processo e sinalizador 0 para preencher o cabeçalho da mensagem do NetLink. A função strcpy () está aqui para copiar a string dentro da estrutura do ponteiro nulo "nl".
Portanto, a carga útil da comunicação mais nlmsghdr compõe uma mensagem de netlink. Quando uma comunicação é recebida, ele entra no buffer que o ponteiro da NL está apontando. Também podemos enviar a mensagem atualizada para a estrutura MSGHDR "MSG". O ponteiro da estrutura “NL” pode ler a mensagem do kernel e exibi -lo no shell através do uso da função nlmsg_data ().
Por fim, o descritor de soquete NetLink é usado para fechar o soquete NetLink.
Dentro do espaço do programa do kernel, criamos uma estrutura nula "Socha" junto com seu ponteiro "*nl_sk". A função nl_data_ready () usa essa estrutura e algum comprimento para acordá -la e preparar os dados após um sono. A função netlink_test () está aqui para esperar uma mensagem que desce do espaço do usuário para o kernel e impede -a. No final, o espaço do kernel libera o soquete.
O “olá você!”A mensagem é exibida em nossa tela depois de executar este exemplo.
Conclusão
Trata-se do uso da função NetLink () 7 de C em nossos programas C separadamente para o espaço do usuário e o espaço do kernel. Discutimos seus usos enviando uma mensagem do espaço do usuário para o espaço do kernel relevante. O código de exemplo deste artigo pode ser implementado em qualquer compilador.