¿Puedo tener más de 32 sockets de netlink en kernelspace?

Tengo varios módulos de kernel que necesitan interactuar con el espacio de usuario. Por lo tanto, cada módulo tiene un socket Netlink.

Mi problema es que estos enchufes interfieren entre sí. Esto se debe a que todos se registran en la misma familia de direcciones de Netlink (porque no hay muchos disponibles para empezar: elmax es 32 ymás de la mitad ya están reservados) y también porque todos se unen al mismo pid (el kernel pid - cero).

Desearía que hubiera más espacio para las familias de direcciones. O, mejor aún, desearía poder unir mis enchufes a otros pids. ¿Cómo es que Netlink es el canal de kernel de usuario preferido si solo se pueden abrir 32 sockets a la vez?

documentación de libnl-3 dice

La dirección de netlink (puerto) consiste en un entero de 32 bits. El puerto 0 (cero) está reservado para el núcleo y se refiere al zócalo del lado del núcleo de cada familia de protocolos de enlace de red. Otros números de puerto generalmente se refieren a los sockets de propiedad del espacio del usuario, aunque esto no se aplica.

Ese último reclamo parece ser una mentira en este momento. El núcleo usa unconstante como pid y no exporta funciones más versátiles:

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

Supongo que puedo recompilar el kernel y aumentar el límite de familia de direcciones. Pero estos son módulos del núcleo; No debería tener que hacer eso.

¿Me estoy perdiendo de algo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta