From: John Crispin Date: Fri, 8 Mar 2013 22:52:52 +0000 (+0100) Subject: add new main.c and fix Makefile/headers X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=commitdiff_plain;h=6390afe7a3cf1663979078711febb2be21fb4cf2 add new main.c and fix Makefile/headers --- diff --git a/CMakeLists.txt b/CMakeLists.txt index fc1ad3a..62e309a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,10 +10,10 @@ IF(APPLE) LINK_DIRECTORIES(/opt/local/lib) ENDIF() -SET(SOURCES main.c ubus.c service.c instance.c utils.c md5.c hotplug-rule.c hotplug.c) +SET(SOURCES main.c ubus.c service.c instance.c utils.c md5.c hotplug.c state.c mkdev.c early.c inittab.c preinit.c coldplug.c syslog.c log.c watchdog.c signal.c system.c debug.c) find_library(json NAMES json-c json) -SET(LIBS ubox ubus ${json} blobmsg_json) +SET(LIBS ubox ubus ${json} blobmsg_json json_script) IF(DEBUG) ADD_DEFINITIONS(-DDEBUG -g3) @@ -26,3 +26,22 @@ TARGET_LINK_LIBRARIES(procd ${LIBS}) INSTALL(TARGETS procd RUNTIME DESTINATION sbin ) + +ADD_EXECUTABLE(askfirst askfirst.c) + +INSTALL(TARGETS askfirst + RUNTIME DESTINATION sbin +) + +ADD_EXECUTABLE(udevtrigger udevtrigger.c) + +INSTALL(TARGETS udevtrigger + RUNTIME DESTINATION sbin +) + +ADD_EXECUTABLE(logread logread.c) +TARGET_LINK_LIBRARIES(logread ${LIBS}) + +INSTALL(TARGETS logread + RUNTIME DESTINATION sbin +) diff --git a/main.c b/main.c index e081109..65ed854 100644 --- a/main.c +++ b/main.c @@ -1,11 +1,31 @@ +/* + * Copyright (C) 2013 Felix Fietkau + * Copyright (C) 2013 John Crispin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include + +#include #include -#include "procd.h" +#include -int debug = 0; +#include "procd.h" +#include "hotplug.h" +#include "watchdog.h" static int usage(const char *prog) { - fprintf(stderr, "Usage: %s [options]\n" + ERROR("Usage: %s [options]\n" "Options:\n" " -s : Path to ubus socket\n" " -d: Enable debug messages\n" @@ -13,10 +33,26 @@ static int usage(const char *prog) return 1; } + +static int main_procd_init(int argc, char **argv) +{ + procd_early(); + debug_init(); + watchdog_init(); + uloop_init(); + hotplug("/etc/hotplug-preinit.json"); + procd_preinit(); + uloop_run(); + return 0; +} + int main(int argc, char **argv) { int ch; + if (!strcmp(basename(*argv), "init")) + return main_procd_init(argc, argv); + while ((ch = getopt(argc, argv, "ds:")) != -1) { switch (ch) { case 's': @@ -30,7 +66,11 @@ int main(int argc, char **argv) } } uloop_init(); - procd_connect_ubus(); + procd_signal(); + if (getpid() != 1) + procd_connect_ubus(); + else + procd_state_next(); uloop_run(); return 0; diff --git a/procd.h b/procd.h index 66a08e2..f3aff89 100644 --- a/procd.h +++ b/procd.h @@ -1,26 +1,66 @@ +/* + * Copyright (C) 2013 Felix Fietkau + * Copyright (C) 2013 John Crispin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + #ifndef __PROCD_H #define __PROCD_H #include #include #include + #include +#include -#define __init __attribute__((constructor)) +#include "syslog.h" -#define DPRINTF(fmt, ...) do { \ - if (debug) \ - fprintf(stderr, "DEBUG %s(%d): " fmt, __func__, __LINE__, ## __VA_ARGS__); \ - } while (0) +#define __init __attribute__((constructor)) #define DEBUG(level, fmt, ...) do { \ if (debug >= level) \ - fprintf(stderr, "DEBUG %s(%d): " fmt, __func__, __LINE__, ## __VA_ARGS__); \ + fprintf(stderr, "procd: %s(%d): " fmt, __func__, __LINE__, ## __VA_ARGS__); \ + } while (0) + +#define LOG(fmt, ...) do { \ + syslog(LOG_INFO, fmt, ## __VA_ARGS__); \ + fprintf(stderr, "procd: "fmt, ## __VA_ARGS__); \ + } while (0) + +#define ERROR(fmt, ...) do { \ + syslog(LOG_ERR, fmt, ## __VA_ARGS__); \ + fprintf(stderr, "procd: "fmt, ## __VA_ARGS__); \ } while (0) -extern int debug; extern char *ubus_socket; + +extern unsigned int debug; +void debug_init(void); + void procd_connect_ubus(void); -void procd_init_service(struct ubus_context *ctx); +void ubus_init_service(struct ubus_context *ctx); +void ubus_init_log(struct ubus_context *ctx); +void ubus_init_system(struct ubus_context *ctx); +void ubus_notify_log(struct log_head *l); + +void procd_state_next(void); +void procd_shutdown(int event); +void procd_early(void); +void procd_preinit(void); +void procd_coldplug(void); +void procd_signal(void); +void procd_inittab(void); +void procd_inittab_run(const char *action); + +int mkdev(const char *progname, int progmode); #endif diff --git a/service.c b/service.c index 16593fc..e51e399 100644 --- a/service.c +++ b/service.c @@ -284,7 +284,7 @@ static struct ubus_object main_object = { .n_methods = ARRAY_SIZE(main_object_methods), }; -void procd_init_service(struct ubus_context *ctx) +void ubus_init_service(struct ubus_context *ctx) { avl_init(&services, avl_strcmp, false, NULL); ubus_add_object(ctx, &main_object); diff --git a/ubus.c b/ubus.c index 7b96fd6..e6f9922 100644 --- a/ubus.c +++ b/ubus.c @@ -61,7 +61,11 @@ static void procd_ubus_try_connect(void) ctx->connection_lost = procd_ubus_connection_lost; ubus_connected = true; - procd_init_service(ctx); + ubus_init_service(ctx); + if (getpid() == 1) { + ubus_init_log(ctx); + ubus_init_system(ctx); + } } static void procd_ubus_connection_lost(struct ubus_context *old_ctx)