X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fdaemon.h;h=959341d813a6f24adbb731f695f955cebe3535e8;hb=HEAD;hp=57f851401583b8ef0591dbc20f4cfd3b5662ea26;hpb=d6056bc7ce15e7b4d1950fda5ad0ee4df7d6a04b;p=sliver-openvswitch.git diff --git a/lib/daemon.h b/lib/daemon.h index 57f851401..959341d81 100644 --- a/lib/daemon.h +++ b/lib/daemon.h @@ -21,6 +21,22 @@ #include #include +/* This file provides an interface for utilities to run in the background + * as daemons on POSIX platforms like Linux or as services on Windows platform. + * Some of the functionalities defined in this file are only applicable to + * POSIX platforms and some are applicable only on Windows. As such, the + * function definitions unique to each platform are separated out with + * ifdef macros. More descriptive comments on individual functions are provided + * in daemon-unix.c (for POSIX platforms) and daemon-windows.c (for Windows). + + * The DAEMON_OPTION_ENUMS, DAEMON_LONG_OPTIONS and DAEMON_OPTION_HANDLERS + * macros are useful for parsing command-line options in individual utilities. + * For e.g., the command-line option "--monitor" is recognized on Linux + * and results in calling the daemon_set_monitor() function. The same option is + * not recognized on Windows platform. + */ + +#ifndef _WIN32 #define DAEMON_OPTION_ENUMS \ OPT_DETACH, \ OPT_NO_CHDIR, \ @@ -56,17 +72,63 @@ daemon_set_monitor(); \ break; -void set_pidfile(const char *name); -void set_no_chdir(void); void set_detach(void); -bool get_detach(void); void daemon_set_monitor(void); +void set_no_chdir(void); +void ignore_existing_pidfile(void); +pid_t read_pidfile(const char *name); +#else +#define DAEMON_OPTION_ENUMS \ + OPT_DETACH, \ + OPT_NO_CHDIR, \ + OPT_PIDFILE, \ + OPT_PIPE_HANDLE, \ + OPT_SERVICE, \ + OPT_SERVICE_MONITOR + +#define DAEMON_LONG_OPTIONS \ + {"detach", no_argument, NULL, OPT_DETACH}, \ + {"no-chdir", no_argument, NULL, OPT_NO_CHDIR}, \ + {"pidfile", optional_argument, NULL, OPT_PIDFILE}, \ + {"pipe-handle", required_argument, NULL, OPT_PIPE_HANDLE}, \ + {"service", no_argument, NULL, OPT_SERVICE}, \ + {"service-monitor", no_argument, NULL, OPT_SERVICE_MONITOR} + +#define DAEMON_OPTION_HANDLERS \ + case OPT_DETACH: \ + break; \ + \ + case OPT_NO_CHDIR: \ + break; \ + \ + case OPT_PIDFILE: \ + set_pidfile(optarg); \ + break; \ + \ + case OPT_PIPE_HANDLE: \ + set_pipe_handle(optarg); \ + break; \ + \ + case OPT_SERVICE: \ + break; \ + \ + case OPT_SERVICE_MONITOR: \ + break; + +void control_handler(DWORD request); +void set_pipe_handle(const char *pipe_handle); +#endif /* _WIN32 */ + +bool get_detach(void); void daemon_save_fd(int fd); void daemonize(void); void daemonize_start(void); void daemonize_complete(void); -void ignore_existing_pidfile(void); void daemon_usage(void); -pid_t read_pidfile(const char *name); +void service_start(int *argcp, char **argvp[]); +void service_stop(void); +bool should_service_stop(void); +void set_pidfile(const char *name); +void close_standard_fds(void); #endif /* daemon.h */