Mercurial > hg > toybox
annotate toys/pending/klogd.c @ 1391:6a06541c090c draft
Use libc daemon() instead of pending daemonize.
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 17 Jul 2014 22:50:49 -0500 |
parents | 8b1814e4c987 |
children |
rev | line source |
---|---|
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
1 /* klogd.c - Klogd, The kernel log Dameon. |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 * |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
3 * Copyright 2013 Sandeep Sharma <sandeep.jack2756@gmail.com> |
997
8b1814e4c987
Ashwini Sharma said that Kyungwan Han should be in the contact info for the commands he sent recently.
Rob Landley <rob@landley.net>
parents:
995
diff
changeset
|
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com> |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
5 * |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
6 * No standard |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
7 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
8 USE_KLOGD(NEWTOY(klogd, "c#<1>8n", TOYFLAG_SBIN)) |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
9 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
10 config KLOGD |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
11 bool "klogd" |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
12 default n |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
13 help |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
14 usage: klogd [-n] [-c N] |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
15 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
16 -c N Print to console messages more urgent than prio N (1-8)" |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
17 -n Run in foreground. |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
18 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
19 config KLOGD_SOURCE_RING_BUFFER |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
20 bool "enable kernel ring buffer as log source." |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
21 default n |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
22 depends on KLOGD |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
23 */ |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
24 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
25 #define FOR_klogd |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
26 #include "toys.h" |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
27 #include <signal.h> |
994 | 28 #include <sys/klog.h> |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
29 GLOBALS( |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
30 long level; |
994 | 31 |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
32 int fd; |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
33 ) |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
34 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
35 static void set_log_level(int level) |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
36 { |
994 | 37 if (CFG_KLOGD_SOURCE_RING_BUFFER) |
38 klogctl(8, NULL, level); | |
39 else { | |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
40 FILE *fptr = xfopen("/proc/sys/kernel/printk", "w"); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
41 fprintf(fptr, "%u\n", level); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
42 fclose(fptr); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
43 fptr = NULL; |
994 | 44 } |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
45 } |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
46 |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
47 static void handle_signal(int sig) |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
48 { |
994 | 49 if (CFG_KLOGD_SOURCE_RING_BUFFER) { |
50 klogctl(7, NULL, 0); | |
51 klogctl(0, NULL, 0); | |
52 } else { | |
53 set_log_level(7); | |
54 xclose(TT.fd); | |
55 } | |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
56 syslog(LOG_NOTICE,"KLOGD: Daemon exiting......"); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
57 exit(1); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
58 } |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
59 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
60 /* |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
61 * Read kernel ring buffer in local buff and keep track of |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
62 * "used" amount to track next read to start. |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
63 */ |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
64 void klogd_main(void) |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
65 { |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
66 int prio, size, used = 0; |
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
67 char *start, *line_start, msg_buffer[16348]; //LOG_LINE_LENGTH - Ring buffer size |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
68 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
69 sigatexit(handle_signal); |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
70 if (toys.optflags & FLAG_c) set_log_level(TT.level); //set log level |
1391
6a06541c090c
Use libc daemon() instead of pending daemonize.
Rob Landley <rob@landley.net>
parents:
997
diff
changeset
|
71 if (!(toys.optflags & FLAG_n)) daemon(0, 0); //Make it daemon |
994 | 72 |
73 if (CFG_KLOGD_SOURCE_RING_BUFFER) { | |
74 syslog(LOG_NOTICE, "KLOGD: started with Kernel ring buffer as log source\n"); | |
75 klogctl(1, NULL, 0); | |
76 } else { | |
77 TT.fd = xopen("/proc/kmsg", O_RDONLY); //_PATH_KLOG in paths.h | |
78 syslog(LOG_NOTICE, "KLOGD: started with /proc/kmsg as log source\n"); | |
79 } | |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
80 openlog("Kernel", 0, LOG_KERN); //open connection to system logger.. |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
81 |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
82 while(1) { |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
83 start = msg_buffer + used; //start updated for re-read. |
994 | 84 if (CFG_KLOGD_SOURCE_RING_BUFFER) { |
85 size = klogctl(2, start, sizeof(msg_buffer) - used - 1); | |
86 } else { | |
87 size = xread(TT.fd, start, sizeof(msg_buffer) - used - 1); | |
88 } | |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
89 if (size < 0) perror_exit("error reading file:"); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
90 start[size] = '\0'; //Ensure last line to be NUL terminated. |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
91 if (used) start = msg_buffer; |
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
92 while(start) { |
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
93 if ((line_start = strsep(&start, "\n")) != NULL && start != NULL) used = 0; |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
94 else { //Incomplete line, copy it to start of buff. |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
95 used = strlen(line_start); |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
96 strcpy(msg_buffer, line_start); |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
97 if (used < (sizeof(msg_buffer) - 1)) break; |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
98 used = 0; //we have buffer full, log it as it is. |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
99 } |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
100 prio = LOG_INFO; //we dont know priority, mark it INFO |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
101 if (*line_start == '<') { //we have new line to syslog |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
102 line_start++; |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
103 if (line_start) prio = (int)strtoul(line_start, &line_start, 10); |
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
104 if (*line_start == '>') line_start++; |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
105 } |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
106 if (*line_start) syslog(prio, "%s", line_start); |
950
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
107 } |
a4a6bcf32657
klogd, submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
108 } |
974
5a50be9d00a7
The attached KLOGD patch is an improved version of the one you have in hg.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
955
diff
changeset
|
109 } |