Utilizzo di LaunchD per caricare e configurare un'estensione del kernel in OS X
-
07-11-2019 - |
Domanda
Sto scrivendo un'estensione del kernel di rete per il filtro socket. Per renderlo configurabile, un programma Userland legge un file di configurazione e passa le informazioni a Kext tramite un PF_SYSTEM
PRESA.
Se voglio avere il filtro socket attivo e funzionante il prima possibile all'avvio del sistema, come coreografo il lancio?
La mia idea attuale è quella di utilizzare LaunchD per avviare un piccolo programma di inizializzatore dell'utente. Questo programma userebbe kextload
Per avviare il kext. Successivamente, avrebbe letto il file di configurazione e parlerebbe con Kext attraverso il PF_SYSTEM
PRESA. Avendo fatto il suo lavoro, sarebbe poi uscito rapidamente.
Un'altra opzione sarebbe quella di avere due launchd
elementi, uno per Kext (usando kextload
) e un altro per il lettore di file di configurazione di Userland. Ciò eviterebbe la forchetta, ma altrimenti sarebbe identico. In entrambi i casi, launchd
Dovrebbe eseguire un rapido programma Userland non DAEMON.
Tuttavia, launchd
Sembra essere orientato al lancio di demoni reali, non per compiti rapidi che svolgono il loro lavoro e l'uscita. Il Documento della biblioteca degli sviluppatori dice:
Importante: Se il tuo demone si spegne troppo rapidamente dopo essere stato lanciato, il lancio potrebbe pensare che si sia schiantato. I demoni che continuano questo comportamento possono essere sospesi e non sono stati nuovamente lanciati quando arrivano le richieste future. Per evitare questo comportamento, non chiudere per almeno 10 secondi dopo il lancio.
Questo mi dà l'impressione che launchd
non è il modo corretto per farlo. Come dovrei organizzare il lancio? La mia intera idea sta andando nella direzione sbagliata?
(Come nota a margine, voglio dare all'utente la possibilità di modificare anche le opzioni di filtraggio durante il runtime. Immagino che questo possa essere fatto semplicemente aprendo una nuova connessione socket PF_System al KEXT ogni volta che sono necessarie modifiche.)
Nessuna soluzione corretta