Przeglądaj źródła

ncd: support NCDUdevManager

ambrop7 15 lat temu
rodzic
commit
90c368c1bf
4 zmienionych plików z 19 dodań i 4 usunięć
  1. 1 1
      ncd/CMakeLists.txt
  2. 2 1
      ncd/NCDModule.c
  3. 4 1
      ncd/NCDModule.h
  4. 12 1
      ncd/ncd.c

+ 1 - 1
ncd/CMakeLists.txt

@@ -59,7 +59,7 @@ add_executable(badvpn-ncd
     modules/net_watch_interfaces.c
     modules/net_watch_interfaces.c
     ${NCD_ADDITIONAL_SOURCES}
     ${NCD_ADDITIONAL_SOURCES}
 )
 )
-target_link_libraries(badvpn-ncd system dhcpclient ncdconfig process)
+target_link_libraries(badvpn-ncd system dhcpclient ncdconfig process udevmonitor)
 
 
 if (BADVPN_USE_LINUX_INPUT)
 if (BADVPN_USE_LINUX_INPUT)
     string(REPLACE " " ";" FLAGS_LIST "${CMAKE_C_FLAGS}")
     string(REPLACE " " ";" FLAGS_LIST "${CMAKE_C_FLAGS}")

+ 2 - 1
ncd/NCDModule.c

@@ -120,7 +120,7 @@ static void process_dead_job_handler (NCDModuleProcess *o)
     return;
     return;
 }
 }
 
 
-void NCDModuleInst_Init (NCDModuleInst *n, const struct NCDModule *m, NCDModuleInst *method_object, NCDValue *args, BReactor *reactor, BProcessManager *manager, void *user,
+void NCDModuleInst_Init (NCDModuleInst *n, const struct NCDModule *m, NCDModuleInst *method_object, NCDValue *args, BReactor *reactor, BProcessManager *manager, NCDUdevManager *umanager, void *user,
                          NCDModule_handler_event handler_event,
                          NCDModule_handler_event handler_event,
                          NCDModule_handler_getvar handler_getvar,
                          NCDModule_handler_getvar handler_getvar,
                          NCDModule_handler_getobj handler_getobj,
                          NCDModule_handler_getobj handler_getobj,
@@ -133,6 +133,7 @@ void NCDModuleInst_Init (NCDModuleInst *n, const struct NCDModule *m, NCDModuleI
     n->args = args;
     n->args = args;
     n->reactor = reactor;
     n->reactor = reactor;
     n->manager = manager;
     n->manager = manager;
+    n->umanager = umanager;
     n->user = user;
     n->user = user;
     n->handler_event = handler_event;
     n->handler_event = handler_event;
     n->handler_getvar = handler_getvar;
     n->handler_getvar = handler_getvar;

+ 4 - 1
ncd/NCDModule.h

@@ -28,6 +28,7 @@
 #include <system/BPending.h>
 #include <system/BPending.h>
 #include <system/BLog.h>
 #include <system/BLog.h>
 #include <process/BProcess.h>
 #include <process/BProcess.h>
+#include <udevmonitor/NCDUdevManager.h>
 #include <ncd/NCDValue.h>
 #include <ncd/NCDValue.h>
 
 
 #define NCDMODULE_EVENT_UP 1
 #define NCDMODULE_EVENT_UP 1
@@ -54,6 +55,7 @@ struct NCDModule;
 struct NCDModuleInitParams {
 struct NCDModuleInitParams {
     BReactor *reactor;
     BReactor *reactor;
     BProcessManager *manager;
     BProcessManager *manager;
+    NCDUdevManager *umanager;
 };
 };
 
 
 typedef struct NCDModuleInst_s {
 typedef struct NCDModuleInst_s {
@@ -62,6 +64,7 @@ typedef struct NCDModuleInst_s {
     NCDValue *args;
     NCDValue *args;
     BReactor *reactor;
     BReactor *reactor;
     BProcessManager *manager;
     BProcessManager *manager;
+    NCDUdevManager *umanager;
     void *user;
     void *user;
     NCDModule_handler_event handler_event;
     NCDModule_handler_event handler_event;
     NCDModule_handler_getvar handler_getvar;
     NCDModule_handler_getvar handler_getvar;
@@ -90,7 +93,7 @@ typedef struct NCDModuleProcess_s {
     DebugObject d_obj;
     DebugObject d_obj;
 } NCDModuleProcess;
 } NCDModuleProcess;
 
 
-void NCDModuleInst_Init (NCDModuleInst *n, const struct NCDModule *m, NCDModuleInst *method_object, NCDValue *args, BReactor *reactor, BProcessManager *manager, void *user,
+void NCDModuleInst_Init (NCDModuleInst *n, const struct NCDModule *m, NCDModuleInst *method_object, NCDValue *args, BReactor *reactor, BProcessManager *manager, NCDUdevManager *umanager, void *user,
                          NCDModule_handler_event handler_event,
                          NCDModule_handler_event handler_event,
                          NCDModule_handler_getvar handler_getvar,
                          NCDModule_handler_getvar handler_getvar,
                          NCDModule_handler_getobj handler_getobj,
                          NCDModule_handler_getobj handler_getobj,

+ 12 - 1
ncd/ncd.c

@@ -40,6 +40,7 @@
 #include <system/BSignal.h>
 #include <system/BSignal.h>
 #include <system/BSocket.h>
 #include <system/BSocket.h>
 #include <process/BProcess.h>
 #include <process/BProcess.h>
+#include <udevmonitor/NCDUdevManager.h>
 #include <ncdconfig/NCDConfigParser.h>
 #include <ncdconfig/NCDConfigParser.h>
 #include <ncd/NCDModule.h>
 #include <ncd/NCDModule.h>
 #include <ncd/modules/modules.h>
 #include <ncd/modules/modules.h>
@@ -127,6 +128,9 @@ int terminating;
 // process manager
 // process manager
 BProcessManager manager;
 BProcessManager manager;
 
 
+// udev manager
+NCDUdevManager umanager;
+
 // config AST
 // config AST
 struct NCDConfig_interfaces *config_ast;
 struct NCDConfig_interfaces *config_ast;
 
 
@@ -242,6 +246,9 @@ int main (int argc, char **argv)
         goto fail1a;
         goto fail1a;
     }
     }
     
     
+    // init udev manager
+    NCDUdevManager_Init(&umanager, &ss, &manager);
+    
     // setup signal handler
     // setup signal handler
     if (!BSignal_Init(&ss, signal_handler, NULL)) {
     if (!BSignal_Init(&ss, signal_handler, NULL)) {
         BLog(BLOG_ERROR, "BSignal_Init failed");
         BLog(BLOG_ERROR, "BSignal_Init failed");
@@ -270,6 +277,7 @@ int main (int argc, char **argv)
     struct NCDModuleInitParams params;
     struct NCDModuleInitParams params;
     params.reactor = &ss;
     params.reactor = &ss;
     params.manager = &manager;
     params.manager = &manager;
+    params.umanager = &umanager;
     
     
     // init modules
     // init modules
     size_t num_inited_modules = 0;
     size_t num_inited_modules = 0;
@@ -318,6 +326,9 @@ fail3:
     // remove signal handler
     // remove signal handler
     BSignal_Finish();
     BSignal_Finish();
 fail2:
 fail2:
+    // free udev manager
+    NCDUdevManager_Free(&umanager);
+    
     // free process manager
     // free process manager
     BProcessManager_Free(&manager);
     BProcessManager_Free(&manager);
 fail1a:
 fail1a:
@@ -1037,7 +1048,7 @@ void process_advance_job_handler (struct process *p)
     
     
     // initialize module instance
     // initialize module instance
     NCDModuleInst_Init(
     NCDModuleInst_Init(
-        &ps->inst, module, method_object, &ps->inst_args, &ss, &manager, ps,
+        &ps->inst, module, method_object, &ps->inst_args, &ss, &manager, &umanager, ps,
         (NCDModule_handler_event)process_statement_instance_handler_event,
         (NCDModule_handler_event)process_statement_instance_handler_event,
         (NCDModule_handler_getvar)process_statement_instance_handler_getvar,
         (NCDModule_handler_getvar)process_statement_instance_handler_getvar,
         (NCDModule_handler_getobj)process_statement_instance_handler_getobj,
         (NCDModule_handler_getobj)process_statement_instance_handler_getobj,