diff --git a/Kconfig b/Kconfig index ebce56c6d27111f8b9e15ab3f15605d6dc34780d..5905d7023f96eb239d2abec4baa8b555ef9b44d9 100644 --- a/Kconfig +++ b/Kconfig @@ -97,6 +97,29 @@ config WRS_LOG_PTP to represent no logging (like /dev/null). Please note that unknown facility names will generate a runtime error on the switch. +config WRS_LOG_SNMPD + string "Logging directions for the SNMP daemon" + default "sd" + help + The string can be a pathname (e.g. /dev/kmsg) or a valid snmpd log + option (without -L). "sd" or "s daemon" will forward messages to + syslog with daemon as facility. To set level (i.e. 5) use + "S 5 daemon". For details please check "man snmpcmd". An empty + strings is used to represent no logging (like /dev/null). Please + note that unknown facility names will generate a runtime error on the + switch. + +config WRS_LOG_MONIT + string "Logging directions for the monit" + default "syslog" + help + The string can be a pathname (e.g. /dev/kmsg) or a "syslog" string. + An empty strings is used to represent no logging. If it is needed to + select facility and level please leave here empty string and change + /etc/monitrc file directly. + Please note that unknown facility names will generate a runtime error + on the switch. + config KEEP_ROOTFS bool "Keep generated filesystem and related script" help diff --git a/doc/wrs-user-manual.in b/doc/wrs-user-manual.in index 0080570c98a032af0b3c6b957acaf19946ea3735..2afd467b94a2f0939b9e26c2ebcb892253db5233 100644 --- a/doc/wrs-user-manual.in +++ b/doc/wrs-user-manual.in @@ -472,7 +472,7 @@ value is changed by the web interface, proper action is taken. Supply Right (PSR) temperature sensors. When any temperature exceeds threshold level SNMP object @t{WR-SWITCH-MIB::tempWarning} will change accordingly. - + @item CONFIG_WRS_LOG_HAL @itemx CONFIG_WRS_LOG_RTU @itemx CONFIG_WRS_LOG_PTP @@ -485,6 +485,28 @@ value is changed by the web interface, proper action is taken. unknown facility names will generate a runtime error on the switch. All three strings default to ``@t{daemon.info}''. +@item CONFIG_WRS_LOG_SNMPD + + Value can be a pathname, to select logging to file (and + @t{/dev/kmsg} is a possible ``file'' target) or a valid snmpd log + option (without -L). + Allowed strings are in format ``@t{s} @i{facility}'' (e.g. + ``@t{s daemon}'') and ``@t{s} @i{level} @i{facility}'' (e.g. + ``@t{s 2 daemon}''). For example, ``@t{sd}'' or ``@t{s daemon}'' will forward + messages to syslog with daemon as facility. To set level (i.e. 5) use + ``@t{S 5 daemon}''. For details please check ``man snmpcmd''. An empty + strings selects no logging at all. Please note that unknown facility + names will generate a runtime error on the switch. + +@item CONFIG_WRS_LOG_MONIT + The string can be a pathname (e.g. @t{/dev/kmsg}) or a @t{syslog} + string. + An empty string is used to represent no logging. If it is needed to + select facility and level please leave here empty string and change + @t{/etc/monitrc} file directly. + Please note that unknown facility names will generate a runtime error + on the switch. + @item CONFIG_PORT00_PARAMS @itemx CONFIG_PORT01_PARAMS @itemx ... diff --git a/userspace/rootfs_override/etc/init.d/monit.sh b/userspace/rootfs_override/etc/init.d/monit.sh index bc98ca4c30ef4f2a8db198d9a1999991027b7b5e..2964877db1df91aaae977723e84ff4f063ccebd4 100755 --- a/userspace/rootfs_override/etc/init.d/monit.sh +++ b/userspace/rootfs_override/etc/init.d/monit.sh @@ -52,9 +52,21 @@ init() { fi if [ -z "$CONFIG_MONIT_DISABLE" ]; then + + if [ -z $CONFIG_WRS_LOG_MONIT ]; then + LOG=""; + elif echo "$CONFIG_WRS_LOG_MONIT" | grep / > /dev/null; then + # if a pathname, use it + LOG="-l $CONFIG_WRS_LOG_MONIT"; + else + # not a pathname, monit cannot take facility nor level from command + # line, only possible from configuration file + LOG="-l syslog" + fi + echo "Start monit" # start monit - /usr/bin/monit + /usr/bin/monit $LOG else echo "Monit disabled in dot-config" loop_forever diff --git a/userspace/rootfs_override/etc/init.d/snmpd b/userspace/rootfs_override/etc/init.d/snmpd index db2955076223042b592fd30fcd4e7d4fe80cea6c..5e907450255ae9dbcb75c0efbd6961dc0f98c5fb 100755 --- a/userspace/rootfs_override/etc/init.d/snmpd +++ b/userspace/rootfs_override/etc/init.d/snmpd @@ -2,6 +2,7 @@ SNMP_PID=/var/run/snmpd.pid SNMP_CONF=/wr/etc/snmpd.conf +dotconfig=/wr/etc/dot-config start_counter() { # increase boot counter @@ -17,9 +18,29 @@ start_counter() { start() { echo -n "Starting snmpd daemon: " - # Log to syslog at daemon level. And log source address (-a) + + if [ -f "$dotconfig" ]; then + . "$dotconfig" + else + echo "$0 unable to source dot-config ($dotconfig)!" + fi + + WRS_LOG=$CONFIG_WRS_LOG_SNMPD + + if [ -z "$WRS_LOG" ]; then + LOG=""; + elif echo "$WRS_LOG" | grep / > /dev/null; then + # if a pathname, use it + LOG="-Lf $WRS_LOG"; + else + # not a pathname: use verbatim + LOG="-L$WRS_LOG" + fi + + # Log source address (-a) start-stop-daemon -q -p $SNMP_PID -S \ - --exec /usr/sbin/snmpd -- -Lsd -p $SNMP_PID -a -c $SNMP_CONF + --exec /usr/sbin/snmpd -- $LOG -p $SNMP_PID -a -c $SNMP_CONF + ret=$? if [ $ret -eq 0 ]; then start_counter @@ -43,6 +64,8 @@ stop() { restart() { stop + # give time to snmpd to stop + sleep 1 start } diff --git a/userspace/rootfs_override/wr/sbin/stop-mb.sh b/userspace/rootfs_override/wr/sbin/stop-mb.sh index ca48a34b36a9c1675c0bcb6366fffb8d795219ed..f6aee2e8527a287f96d8e78e846e5b8e18b607fc 100755 --- a/userspace/rootfs_override/wr/sbin/stop-mb.sh +++ b/userspace/rootfs_override/wr/sbin/stop-mb.sh @@ -1,7 +1,7 @@ #!/bin/ash export WR_HOME="/wr" -echo "Killing deamon" +echo "Killing daemon" killall wrsw_hal killall wrsw_rtud killall ptpd diff --git a/userspace/snmpd/WR-SWITCH-MIB.txt b/userspace/snmpd/WR-SWITCH-MIB.txt index 08287a4179d5bee13f681690e69ea3ae2ad1b203..035bfb1b2e62fd373bfa236f5c1bd62a5ad6d04f 100644 --- a/userspace/snmpd/WR-SWITCH-MIB.txt +++ b/userspace/snmpd/WR-SWITCH-MIB.txt @@ -696,9 +696,9 @@ wrsBootUserspaceDaemonsMissing OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Checking if all desired deamons are running. - allDeamonsPresent - all deamons running - other numbers represent number of deamons not running + "Checking if all desired daemons are running. + allDeamonsPresent - all daemons running + other numbers represent number of daemons not running other errors (can be: unable to run ps command or problem with multiple process instances) are reported as maximum number of missing modules" ::= { wrsBootStatusGroup 14 } @@ -925,7 +925,7 @@ wrsStartCntHAL OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Number of HAL deamon starts" + "Number of HAL daemon starts" ::= { wrsStartCntGroup 1 } wrsStartCntPPSI OBJECT-TYPE @@ -933,7 +933,7 @@ wrsStartCntPPSI OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Number of PPSI deamon starts" + "Number of PPSI daemon starts" ::= { wrsStartCntGroup 2 } wrsStartCntRTUd OBJECT-TYPE @@ -941,7 +941,7 @@ wrsStartCntRTUd OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Number of RTU deamon starts" + "Number of RTU daemon starts" ::= { wrsStartCntGroup 3 } wrsStartCntSshd OBJECT-TYPE @@ -949,7 +949,7 @@ wrsStartCntSshd OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Nmber of SSH deamon starts" + "Nmber of SSH daemon starts" ::= { wrsStartCntGroup 4 } wrsStartCntHttpd OBJECT-TYPE @@ -957,7 +957,7 @@ wrsStartCntHttpd OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Nmber of HTTP deamon starts" + "Nmber of HTTP daemon starts" ::= { wrsStartCntGroup 5 } wrsStartCntSnmpd OBJECT-TYPE @@ -965,7 +965,7 @@ wrsStartCntSnmpd OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Nmber of SNMP deamon starts" + "Nmber of SNMP daemon starts" ::= { wrsStartCntGroup 6 } wrsStartCntSyslogd OBJECT-TYPE @@ -973,7 +973,7 @@ wrsStartCntSyslogd OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Nmber of SYSLOG deamon starts" + "Nmber of SYSLOG daemon starts" ::= { wrsStartCntGroup 7 } -- wrsSpllState (.7.3) diff --git a/userspace/snmpd/wrsBootStatusGroup.c b/userspace/snmpd/wrsBootStatusGroup.c index 7aa01ec51a5a60f0168808a477a489d72a0f1220..29d8ff938d41c262307ccb9756d402970e7b695b 100644 --- a/userspace/snmpd/wrsBootStatusGroup.c +++ b/userspace/snmpd/wrsBootStatusGroup.c @@ -61,21 +61,21 @@ static struct wrs_km_item kernel_modules[] = { [6] = {"g_serial"}, }; -/* user space deamon list item */ +/* user space daemon list item */ struct wrs_usd_item { char *key; /* process name */ int32_t exp; /* expected number of processes */ uint32_t cnt; /* number of processes found */ }; -/* user space deamon list */ +/* user space daemon list */ /* - key contain process name reported by ps command * - positive exp describe exact number of expected processes * - negative exp describe minimum number of expected processes. Usefull for * processes that is hard to predict number of their instances. For example * new dropbear process is spawned at ssh login. */ -static struct wrs_usd_item userspace_deamons[] = { +static struct wrs_usd_item userspace_daemons[] = { [0] = {.key = "/usr/sbin/dropbear", .exp = -1}, /* expect at least one * dropbear process */ [1] = {"/wr/bin/wrsw_hal", 2}, /* two wrsw_hal instances */ @@ -381,8 +381,8 @@ static void get_loaded_kernel_modules_status(void) fclose(f); } -/* check if deamons from userspace_deamons array are running */ -static void get_deamons_status(void) +/* check if daemons from userspace_daemons array are running */ +static void get_daemons_status(void) { FILE *f; char key[41]; /* 1 for null char */ @@ -391,9 +391,9 @@ static void get_deamons_status(void) int processes_wrong = 0; /* number of too many or too few processes */ - /* clear user space deamon counters */ - for (i = 0; i < ARRAY_SIZE(userspace_deamons); i++) { - userspace_deamons[i].cnt = 0; + /* clear user space daemon counters */ + for (i = 0; i < ARRAY_SIZE(userspace_daemons); i++) { + userspace_daemons[i].cnt = 0; } /* Use ps command to get process list, more portable, less error prone @@ -405,11 +405,11 @@ static void get_deamons_status(void) wrsBootStatus_s.wrsBootUserspaceDaemonsMissing = 0; /* Notify snmp about error in processes list */ /* Count number of expected processes */ - for (i = 0; i < ARRAY_SIZE(userspace_deamons); i++) { + for (i = 0; i < ARRAY_SIZE(userspace_daemons); i++) { /* when exp < 0 then expect at least number of * -exp processes */ wrsBootStatus_s.wrsBootUserspaceDaemonsMissing += - abs(userspace_deamons[i].exp); + abs(userspace_daemons[i].exp); } return; @@ -423,31 +423,31 @@ static void get_deamons_status(void) if (ret != 1) continue; /* error... or EOF */ - for (i = 0; i < ARRAY_SIZE(userspace_deamons); i++) { - if (strncmp(key, userspace_deamons[i].key, 40)) + for (i = 0; i < ARRAY_SIZE(userspace_daemons); i++) { + if (strncmp(key, userspace_daemons[i].key, 40)) continue; - userspace_deamons[i].cnt++; + userspace_daemons[i].cnt++; break; } } - for (i = 0; i < ARRAY_SIZE(userspace_deamons); i++) { - if (userspace_deamons[i].exp < 0) { + for (i = 0; i < ARRAY_SIZE(userspace_daemons); i++) { + if (userspace_daemons[i].exp < 0) { /* if exp < 0 then expect at least -exp processes, * useful in situation when we cannot predict exact * number of processes. * NOTE: exp in this case is negative number */ /* saturate cnt */ - if (userspace_deamons[i].cnt > (-userspace_deamons[i].exp)) { - userspace_deamons[i].cnt = - (-userspace_deamons[i].exp); + if (userspace_daemons[i].cnt > (-userspace_daemons[i].exp)) { + userspace_daemons[i].cnt = + (-userspace_daemons[i].exp); } } /* Calculate delta between expected and counted number * of processes. Neither too much or too few are ok. * NOTE: abs "exp" too */ - processes_wrong += abs(abs(userspace_deamons[i].exp) - - userspace_deamons[i].cnt); + processes_wrong += abs(abs(userspace_daemons[i].exp) + - userspace_daemons[i].cnt); } /* save number of processes missing */ @@ -480,8 +480,8 @@ time_t wrsBootStatus_data_fill(void) /* get loaded kernel modules */ get_loaded_kernel_modules_status(); - /* get info about running deamons */ - get_deamons_status(); + /* get info about running daemons */ + get_daemons_status(); /* there was an update, return current time */ return time_update; diff --git a/userspace/snmpd/wrsOSStatusGroup.c b/userspace/snmpd/wrsOSStatusGroup.c index 4d4f5f71a6fc3388e6c085af11c8ed07bdde6744..8f1036d3b20410428926bec1b5637aa8d7620872 100644 --- a/userspace/snmpd/wrsOSStatusGroup.c +++ b/userspace/snmpd/wrsOSStatusGroup.c @@ -80,7 +80,7 @@ time_t wrsOSStatus_data_fill(void) || b->wrsBootLoadLM32 == WRS_BOOT_LOAD_LM32_ERROR || b->wrsBootLoadLM32 == WRS_BOOT_LOAD_LM32_FILE_NOT_FOUND || b->wrsBootKernelModulesMissing > 0 /* contain number of missing modules */ - || b->wrsBootUserspaceDaemonsMissing > 0 /* contain number of missing deamons */ + || b->wrsBootUserspaceDaemonsMissing > 0 /* contain number of missing daemons */ ) { wrsOSStatus_s.wrsBootSuccessful = WRS_BOOT_SUCCESSFUL_ERROR; diff --git a/userspace/wrsw_hal/hal_main.c b/userspace/wrsw_hal/hal_main.c index 91fc90e87422f32c9823f7e9b0ee2669991e5ab6..32852785ebf59208cc8dda68c5644a79b18e12e8 100644 --- a/userspace/wrsw_hal/hal_main.c +++ b/userspace/wrsw_hal/hal_main.c @@ -69,7 +69,7 @@ static int hal_shutdown() return 0; } -static void hal_deamonize(); +static void hal_daemonize(); /* Main initialization function */ static int hal_init() @@ -105,13 +105,13 @@ static int hal_init() shw_io_write(shw_io_led_state_g, 1); if (daemon_mode) - hal_deamonize(); + hal_daemonize(); return 0; } /* Turns a nice and well-behaving HAL into an evil servant of satan. */ -static void hal_deamonize() +static void hal_daemonize() { pid_t pid, sid;