netlink: definição de GNEL_ID_GENERATE removida da biblioteca do kernel RHEL7.5

0

Nós temos um módulo de kernel que estava construindo bem para a família RedHat de distribuição Linux, até o recente RHEL7.5.

Ao tentar criar o RHEL7.5, temos um erro de:

... erro: "GENL_ID_GENERATE" não declarado ...

Fiz algumas leituras, e parece que isso é uma mudança desde o kernel 4.11+, mas o RHEL7.5 é baseado no kernel 3.10+. O que aconteceu?

De qualquer forma, sei que o valor de GENL_ID_GENERATE é simplesmente 0. Mas posso usar 0 para substituir a macro? Haverá um problema com o módulo de modo de usuário para se comunicar com este módulo do kernel?

Ou qual deve ser a maneira correta de resolver o problema? Algum conselho?

Obrigado e cumprimentos, Weishan

    
por Weishan Yang 08.05.2018 / 17:09

1 resposta

1

Olhando para o git comete para o netlink parece que várias mudanças foram feitas na estrutura na versão 4.11:

Primeiro, você pode omitir completamente o campo .id do seu inicializador em genl_family , pois o Linux removeu os IDs de família estáticos.

Além disso, a função genl_register_family_with_ops não é mais usada. Em vez disso, como anotado na documentação do Linux HOWTO para netlink :

Up to linux 4.10, use genl_register_family_with_ops(). On 4.10 and later, include a reference to your genl_ops struct as an element in the genl_family struct (element .ops), as well as the number of commands (element .n_ops).

    
por 16.05.2018 / 09:09