Posso ter mais de 32 soquetes netlink no kernelspace?

Eu tenho vários módulos do kernel que precisam interagir com o espaço do usuário. Portanto, cada módulo possui um soquete Netlink.

Meu problema é que esses soquetes interferem um no outro. Isso ocorre porque todos eles se registram na mesma família de endereços Netlink (porque não há muitos disponíveis para começar - omax é 32 emais da metade já está reservada) e também porque todos eles se ligam ao mesmo pid (o kernel pid - zero).

Eu gostaria que houvesse mais espaço para famílias de endereços. Ou, melhor ainda, eu gostaria de poder ligar minhas tomadas a outros pids. Como o Netlink é o canal de usuário-kernel preferido se apenas 32 soquetes podem ser abertos a qualquer momento?

Documentação da libnl-3 diz

O endereço de netlink (porta) consiste em um número inteiro de 32 bits. A porta 0 (zero) é reservada para o kernel e refere-se ao soquete do lado do kernel de cada família de protocolos netlink. Outros números de porta geralmente se referem a soquetes pertencentes ao espaço do usuário, embora isso não seja imposto.

Essa última afirmação parece ser uma mentira agora. O kernel usa umconstante como pid e não exporta funções mais versáteis:

if (netlink_insert(sk, 0))
    goto out_sock_release;

Acho que posso recompilar o kernel e aumentar o limite da família de endereços. Mas estes são módulos do kernel; Eu não deveria ter que fazer isso.

Estou esquecendo de algo?

questionAnswers(2)

yourAnswerToTheQuestion