2011-05-10 2 views
2

소켓 필터링을위한 네트워크 커널 확장을 쓰고 있습니다. 설정이 가능하도록, 사용자 영역 프로그램은 설정 파일을 읽고 PF_SYSTEM 소켓을 통해 kext에 정보를 전달합니다.launchd를 사용하여 OS X에서 커널 확장로드 및 구성

시스템 시작시 가능한 한 빨리 소켓 필터를 설치하고 실행하려면 어떻게 시작합니까?

나의 현재 아이디어는 launchd를 사용하여 작은 userland 초기화 프로그램을 시작하는 것입니다. 이 프로그램은 kextload을 사용하여 kext를 시작합니다. 그 후 config 파일을 읽고 PF_SYSTEM 소켓을 통해 kext와 통신합니다. 그것의 일을 마친 후에, 그것은 빨리 끝낼 것입니다.

두 개의 launchd 항목이 있습니다. 하나는 kext (kextload 사용)이고 다른 하나는 userland 구성 파일 판독기입니다. 이것은 포크를 피할 수 있지만 그렇지 않으면 동일합니다. 어느 쪽이든, launchd은 빠른 비 - 데몬 사용자 랜드 프로그램을 실행해야합니다.

그러나 launchd은 실제 데몬을 시작하기위한 것으로 보이지만 업무와 종료를 빠르게하는 작업에는 적합하지 않습니다. developer library document는 말한다 :

중요 : 데몬이 너무 빨리 시작 후 종료 경우, launchd에가 추락하고있다 생각할 수 있습니다. 이 동작을 계속하는 데몬은 일시 중단 될 수 있으며 이후 요청이 도착하면 다시 시작되지 않을 수 있습니다. 이 문제를 방지하려면 시작한 후 최소 10 초 동안 종료하지 마십시오.

이렇게하면 launchd이 올바른 방법이 아니라는 인상을받습니다. 발사는 어떻게 구성해야합니까? 내 생각이 잘못된 방향으로 가고있는 것일까 요?

(참고로 런타임 중에 필터링 옵션을 변경할 수있는 가능성을 사용자에게 제공하고 싶습니다. 변경이 필요할 때마다 kext에 대한 새로운 PF_SYSTEM 소켓 연결을 열어서 간단하게이 작업을 수행 할 수 있다고 상상합니다.)

답변

2

필자는 필요시 시작되는 데몬에만주의해야한다고 생각합니다.

+0

감사합니다. 이것이 사실이라면 그것은 좋은 소식입니다. 이것은 당신이 스스로 발견 한 것입니까, 아니면 어딘가에 문서화되어 있습니까? – jjs