Ajouter dynamicment des entrées à sysctl

Considérons ce code:

int procmon_state = 0; static struct ctl_table_header *procmon_table_header; static ctl_table state_table[] = { { .procname = "state", .mode = 0666, .proc_handler = &proc_dointvec_minmax, .data = &procmon_state, .maxlen = sizeof(int), .extra1 = "\x00\x00\x00\x00" /*0*/, .extra2 = "\x01\x00\x00\x00" /*1*/ }, { 0 } }; static ctl_table procmon_table[] = { { .procname = "procmon", .mode = 0555, .child = state_table }, { 0 } }; procmon_table_header = register_sysctl_table(procmon_table); 

Cela créera une entrée dans /proc/sys (pour que je puisse ensuite simplement sysctl procmon.state=1 ).

Ma question est la suivante: une fois cette entrée créée, comment puis-je append d’autres entrées?

EDIT: Plus d’entrées dans procmon , c’est-à-dire. Par exemple, procmon.another_state

    Il n’y a pas de fonction pour changer les tables sysctl dans sysctl.h .

    Vous devez répertorier toutes les entrées dont vous pourriez avoir besoin avant d’ appeler register_sysctl_table .

    Si vous devez vraiment changer la table après coup, vous devez appeler unregister_sysctl_table avant de faire vos modifications, puis l’enregistrer à nouveau.

    Oui, vous pouvez, il suffit de regarder dans le répertoire des pilotes du kernel Linux pour de nombreux exemples. Pour l’essentiel, il vous suffit d’appeler register_sysctl_table () plusieurs fois. Pour chaque appel que vous effectuez, vous allez créer une twig à partir d’une twig existante.

    Les détails sont couverts ici:

    https://tthtlc.wordpress.com/2016/05/26/how-to-add-new-ensortinges-to-sysctl-with-the-same-root/