Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Switch - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
86
Issues
86
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Switch - Software
Commits
1f2a404f
Commit
1f2a404f
authored
Jul 06, 2015
by
Adam Wujek
💬
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'adam-log'
parents
23781a79
b64d15f1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
121 additions
and
41 deletions
+121
-41
Kconfig
Kconfig
+23
-0
wrs-user-manual.in
doc/wrs-user-manual.in
+23
-1
monit.sh
userspace/rootfs_override/etc/init.d/monit.sh
+13
-1
snmpd
userspace/rootfs_override/etc/init.d/snmpd
+25
-2
stop-mb.sh
userspace/rootfs_override/wr/sbin/stop-mb.sh
+1
-1
WR-SWITCH-MIB.txt
userspace/snmpd/WR-SWITCH-MIB.txt
+10
-10
wrsBootStatusGroup.c
userspace/snmpd/wrsBootStatusGroup.c
+22
-22
wrsOSStatusGroup.c
userspace/snmpd/wrsOSStatusGroup.c
+1
-1
hal_main.c
userspace/wrsw_hal/hal_main.c
+3
-3
No files found.
Kconfig
View file @
1f2a404f
...
@@ -97,6 +97,29 @@ config WRS_LOG_PTP
...
@@ -97,6 +97,29 @@ config WRS_LOG_PTP
to represent no logging (like /dev/null). Please note that
to represent no logging (like /dev/null). Please note that
unknown facility names will generate a runtime error on the switch.
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
config KEEP_ROOTFS
bool "Keep generated filesystem and related script"
bool "Keep generated filesystem and related script"
help
help
...
...
doc/wrs-user-manual.in
View file @
1f2a404f
...
@@ -472,7 +472,7 @@ value is changed by the web interface, proper action is taken.
...
@@ -472,7 +472,7 @@ value is changed by the web interface, proper action is taken.
Supply Right (PSR) temperature sensors. When any temperature exceeds
Supply Right (PSR) temperature sensors. When any temperature exceeds
threshold level SNMP object @t
{
WR-SWITCH-MIB::tempWarning
}
will change
threshold level SNMP object @t
{
WR-SWITCH-MIB::tempWarning
}
will change
accordingly.
accordingly.
@item CONFIG
_
WRS
_
LOG
_
HAL
@item CONFIG
_
WRS
_
LOG
_
HAL
@itemx CONFIG
_
WRS
_
LOG
_
RTU
@itemx CONFIG
_
WRS
_
LOG
_
RTU
@itemx CONFIG
_
WRS
_
LOG
_
PTP
@itemx CONFIG
_
WRS
_
LOG
_
PTP
...
@@ -485,6 +485,28 @@ value is changed by the web interface, proper action is taken.
...
@@ -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.
unknown facility names will generate a runtime error on the switch.
All three strings default to ``@t
{
daemon.info
}
''.
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
@item CONFIG
_
PORT00
_
PARAMS
@itemx CONFIG
_
PORT01
_
PARAMS
@itemx CONFIG
_
PORT01
_
PARAMS
@itemx ...
@itemx ...
...
...
userspace/rootfs_override/etc/init.d/monit.sh
View file @
1f2a404f
...
@@ -52,9 +52,21 @@ init() {
...
@@ -52,9 +52,21 @@ init() {
fi
fi
if
[
-z
"
$CONFIG_MONIT_DISABLE
"
]
;
then
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"
echo
"Start monit"
# start monit
# start monit
/usr/bin/monit
/usr/bin/monit
$LOG
else
else
echo
"Monit disabled in dot-config"
echo
"Monit disabled in dot-config"
loop_forever
loop_forever
...
...
userspace/rootfs_override/etc/init.d/snmpd
View file @
1f2a404f
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
SNMP_PID
=
/var/run/snmpd.pid
SNMP_PID
=
/var/run/snmpd.pid
SNMP_CONF
=
/wr/etc/snmpd.conf
SNMP_CONF
=
/wr/etc/snmpd.conf
dotconfig
=
/wr/etc/dot-config
start_counter
()
{
start_counter
()
{
# increase boot counter
# increase boot counter
...
@@ -17,9 +18,29 @@ start_counter() {
...
@@ -17,9 +18,29 @@ start_counter() {
start
()
{
start
()
{
echo
-n
"Starting snmpd daemon: "
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
\
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
=
$?
ret
=
$?
if
[
$ret
-eq
0
]
;
then
if
[
$ret
-eq
0
]
;
then
start_counter
start_counter
...
@@ -43,6 +64,8 @@ stop() {
...
@@ -43,6 +64,8 @@ stop() {
restart
()
{
restart
()
{
stop
stop
# give time to snmpd to stop
sleep
1
start
start
}
}
...
...
userspace/rootfs_override/wr/sbin/stop-mb.sh
View file @
1f2a404f
#!/bin/ash
#!/bin/ash
export
WR_HOME
=
"/wr"
export
WR_HOME
=
"/wr"
echo
"Killing d
ea
mon"
echo
"Killing d
ae
mon"
killall wrsw_hal
killall wrsw_hal
killall wrsw_rtud
killall wrsw_rtud
killall ptpd
killall ptpd
...
...
userspace/snmpd/WR-SWITCH-MIB.txt
View file @
1f2a404f
...
@@ -696,9 +696,9 @@ wrsBootUserspaceDaemonsMissing OBJECT-TYPE
...
@@ -696,9 +696,9 @@ wrsBootUserspaceDaemonsMissing OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Checking if all desired d
ea
mons are running.
"Checking if all desired d
ae
mons are running.
allDeamonsPresent - all d
ea
mons running
allDeamonsPresent - all d
ae
mons running
other numbers represent number of d
ea
mons not running
other numbers represent number of d
ae
mons not running
other errors (can be: unable to run ps command or problem with multiple process instances)
other errors (can be: unable to run ps command or problem with multiple process instances)
are reported as maximum number of missing modules"
are reported as maximum number of missing modules"
::= { wrsBootStatusGroup 14 }
::= { wrsBootStatusGroup 14 }
...
@@ -925,7 +925,7 @@ wrsStartCntHAL OBJECT-TYPE
...
@@ -925,7 +925,7 @@ wrsStartCntHAL OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Number of HAL d
ea
mon starts"
"Number of HAL d
ae
mon starts"
::= { wrsStartCntGroup 1 }
::= { wrsStartCntGroup 1 }
wrsStartCntPPSI OBJECT-TYPE
wrsStartCntPPSI OBJECT-TYPE
...
@@ -933,7 +933,7 @@ wrsStartCntPPSI OBJECT-TYPE
...
@@ -933,7 +933,7 @@ wrsStartCntPPSI OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Number of PPSI d
ea
mon starts"
"Number of PPSI d
ae
mon starts"
::= { wrsStartCntGroup 2 }
::= { wrsStartCntGroup 2 }
wrsStartCntRTUd OBJECT-TYPE
wrsStartCntRTUd OBJECT-TYPE
...
@@ -941,7 +941,7 @@ wrsStartCntRTUd OBJECT-TYPE
...
@@ -941,7 +941,7 @@ wrsStartCntRTUd OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Number of RTU d
ea
mon starts"
"Number of RTU d
ae
mon starts"
::= { wrsStartCntGroup 3 }
::= { wrsStartCntGroup 3 }
wrsStartCntSshd OBJECT-TYPE
wrsStartCntSshd OBJECT-TYPE
...
@@ -949,7 +949,7 @@ wrsStartCntSshd OBJECT-TYPE
...
@@ -949,7 +949,7 @@ wrsStartCntSshd OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Nmber of SSH d
ea
mon starts"
"Nmber of SSH d
ae
mon starts"
::= { wrsStartCntGroup 4 }
::= { wrsStartCntGroup 4 }
wrsStartCntHttpd OBJECT-TYPE
wrsStartCntHttpd OBJECT-TYPE
...
@@ -957,7 +957,7 @@ wrsStartCntHttpd OBJECT-TYPE
...
@@ -957,7 +957,7 @@ wrsStartCntHttpd OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Nmber of HTTP d
ea
mon starts"
"Nmber of HTTP d
ae
mon starts"
::= { wrsStartCntGroup 5 }
::= { wrsStartCntGroup 5 }
wrsStartCntSnmpd OBJECT-TYPE
wrsStartCntSnmpd OBJECT-TYPE
...
@@ -965,7 +965,7 @@ wrsStartCntSnmpd OBJECT-TYPE
...
@@ -965,7 +965,7 @@ wrsStartCntSnmpd OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Nmber of SNMP d
ea
mon starts"
"Nmber of SNMP d
ae
mon starts"
::= { wrsStartCntGroup 6 }
::= { wrsStartCntGroup 6 }
wrsStartCntSyslogd OBJECT-TYPE
wrsStartCntSyslogd OBJECT-TYPE
...
@@ -973,7 +973,7 @@ wrsStartCntSyslogd OBJECT-TYPE
...
@@ -973,7 +973,7 @@ wrsStartCntSyslogd OBJECT-TYPE
MAX-ACCESS read-only
MAX-ACCESS read-only
STATUS current
STATUS current
DESCRIPTION
DESCRIPTION
"Nmber of SYSLOG d
ea
mon starts"
"Nmber of SYSLOG d
ae
mon starts"
::= { wrsStartCntGroup 7 }
::= { wrsStartCntGroup 7 }
-- wrsSpllState (.7.3)
-- wrsSpllState (.7.3)
...
...
userspace/snmpd/wrsBootStatusGroup.c
View file @
1f2a404f
...
@@ -61,21 +61,21 @@ static struct wrs_km_item kernel_modules[] = {
...
@@ -61,21 +61,21 @@ static struct wrs_km_item kernel_modules[] = {
[
6
]
=
{
"g_serial"
},
[
6
]
=
{
"g_serial"
},
};
};
/* user space d
ea
mon list item */
/* user space d
ae
mon list item */
struct
wrs_usd_item
{
struct
wrs_usd_item
{
char
*
key
;
/* process name */
char
*
key
;
/* process name */
int32_t
exp
;
/* expected number of processes */
int32_t
exp
;
/* expected number of processes */
uint32_t
cnt
;
/* number of processes found */
uint32_t
cnt
;
/* number of processes found */
};
};
/* user space d
ea
mon list */
/* user space d
ae
mon list */
/* - key contain process name reported by ps command
/* - key contain process name reported by ps command
* - positive exp describe exact number of expected processes
* - positive exp describe exact number of expected processes
* - negative exp describe minimum number of expected processes. Usefull for
* - negative exp describe minimum number of expected processes. Usefull for
* processes that is hard to predict number of their instances. For example
* processes that is hard to predict number of their instances. For example
* new dropbear process is spawned at ssh login.
* new dropbear process is spawned at ssh login.
*/
*/
static
struct
wrs_usd_item
userspace_d
ea
mons
[]
=
{
static
struct
wrs_usd_item
userspace_d
ae
mons
[]
=
{
[
0
]
=
{.
key
=
"/usr/sbin/dropbear"
,
.
exp
=
-
1
},
/* expect at least one
[
0
]
=
{.
key
=
"/usr/sbin/dropbear"
,
.
exp
=
-
1
},
/* expect at least one
* dropbear process */
* dropbear process */
[
1
]
=
{
"/wr/bin/wrsw_hal"
,
2
},
/* two wrsw_hal instances */
[
1
]
=
{
"/wr/bin/wrsw_hal"
,
2
},
/* two wrsw_hal instances */
...
@@ -381,8 +381,8 @@ static void get_loaded_kernel_modules_status(void)
...
@@ -381,8 +381,8 @@ static void get_loaded_kernel_modules_status(void)
fclose
(
f
);
fclose
(
f
);
}
}
/* check if d
eamons from userspace_dea
mons array are running */
/* check if d
aemons from userspace_dae
mons array are running */
static
void
get_d
ea
mons_status
(
void
)
static
void
get_d
ae
mons_status
(
void
)
{
{
FILE
*
f
;
FILE
*
f
;
char
key
[
41
];
/* 1 for null char */
char
key
[
41
];
/* 1 for null char */
...
@@ -391,9 +391,9 @@ static void get_deamons_status(void)
...
@@ -391,9 +391,9 @@ static void get_deamons_status(void)
int
processes_wrong
=
0
;
/* number of too many or too few processes */
int
processes_wrong
=
0
;
/* number of too many or too few processes */
/* clear user space d
ea
mon counters */
/* clear user space d
ae
mon counters */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ea
mons
);
i
++
)
{
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ae
mons
);
i
++
)
{
userspace_d
ea
mons
[
i
].
cnt
=
0
;
userspace_d
ae
mons
[
i
].
cnt
=
0
;
}
}
/* Use ps command to get process list, more portable, less error prone
/* Use ps command to get process list, more portable, less error prone
...
@@ -405,11 +405,11 @@ static void get_deamons_status(void)
...
@@ -405,11 +405,11 @@ static void get_deamons_status(void)
wrsBootStatus_s
.
wrsBootUserspaceDaemonsMissing
=
0
;
wrsBootStatus_s
.
wrsBootUserspaceDaemonsMissing
=
0
;
/* Notify snmp about error in processes list */
/* Notify snmp about error in processes list */
/* Count number of expected processes */
/* Count number of expected processes */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ea
mons
);
i
++
)
{
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ae
mons
);
i
++
)
{
/* when exp < 0 then expect at least number of
/* when exp < 0 then expect at least number of
* -exp processes */
* -exp processes */
wrsBootStatus_s
.
wrsBootUserspaceDaemonsMissing
+=
wrsBootStatus_s
.
wrsBootUserspaceDaemonsMissing
+=
abs
(
userspace_d
ea
mons
[
i
].
exp
);
abs
(
userspace_d
ae
mons
[
i
].
exp
);
}
}
return
;
return
;
...
@@ -423,31 +423,31 @@ static void get_deamons_status(void)
...
@@ -423,31 +423,31 @@ static void get_deamons_status(void)
if
(
ret
!=
1
)
if
(
ret
!=
1
)
continue
;
/* error... or EOF */
continue
;
/* error... or EOF */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ea
mons
);
i
++
)
{
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ae
mons
);
i
++
)
{
if
(
strncmp
(
key
,
userspace_d
ea
mons
[
i
].
key
,
40
))
if
(
strncmp
(
key
,
userspace_d
ae
mons
[
i
].
key
,
40
))
continue
;
continue
;
userspace_d
ea
mons
[
i
].
cnt
++
;
userspace_d
ae
mons
[
i
].
cnt
++
;
break
;
break
;
}
}
}
}
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ea
mons
);
i
++
)
{
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
userspace_d
ae
mons
);
i
++
)
{
if
(
userspace_d
ea
mons
[
i
].
exp
<
0
)
{
if
(
userspace_d
ae
mons
[
i
].
exp
<
0
)
{
/* if exp < 0 then expect at least -exp processes,
/* if exp < 0 then expect at least -exp processes,
* useful in situation when we cannot predict exact
* useful in situation when we cannot predict exact
* number of processes.
* number of processes.
* NOTE: exp in this case is negative number */
* NOTE: exp in this case is negative number */
/* saturate cnt */
/* saturate cnt */
if
(
userspace_d
eamons
[
i
].
cnt
>
(
-
userspace_dea
mons
[
i
].
exp
))
{
if
(
userspace_d
aemons
[
i
].
cnt
>
(
-
userspace_dae
mons
[
i
].
exp
))
{
userspace_d
ea
mons
[
i
].
cnt
=
userspace_d
ae
mons
[
i
].
cnt
=
(
-
userspace_d
ea
mons
[
i
].
exp
);
(
-
userspace_d
ae
mons
[
i
].
exp
);
}
}
}
}
/* Calculate delta between expected and counted number
/* Calculate delta between expected and counted number
* of processes. Neither too much or too few are ok.
* of processes. Neither too much or too few are ok.
* NOTE: abs "exp" too */
* NOTE: abs "exp" too */
processes_wrong
+=
abs
(
abs
(
userspace_d
ea
mons
[
i
].
exp
)
processes_wrong
+=
abs
(
abs
(
userspace_d
ae
mons
[
i
].
exp
)
-
userspace_d
ea
mons
[
i
].
cnt
);
-
userspace_d
ae
mons
[
i
].
cnt
);
}
}
/* save number of processes missing */
/* save number of processes missing */
...
@@ -480,8 +480,8 @@ time_t wrsBootStatus_data_fill(void)
...
@@ -480,8 +480,8 @@ time_t wrsBootStatus_data_fill(void)
/* get loaded kernel modules */
/* get loaded kernel modules */
get_loaded_kernel_modules_status
();
get_loaded_kernel_modules_status
();
/* get info about running d
ea
mons */
/* get info about running d
ae
mons */
get_d
ea
mons_status
();
get_d
ae
mons_status
();
/* there was an update, return current time */
/* there was an update, return current time */
return
time_update
;
return
time_update
;
...
...
userspace/snmpd/wrsOSStatusGroup.c
View file @
1f2a404f
...
@@ -80,7 +80,7 @@ time_t wrsOSStatus_data_fill(void)
...
@@ -80,7 +80,7 @@ time_t wrsOSStatus_data_fill(void)
||
b
->
wrsBootLoadLM32
==
WRS_BOOT_LOAD_LM32_ERROR
||
b
->
wrsBootLoadLM32
==
WRS_BOOT_LOAD_LM32_ERROR
||
b
->
wrsBootLoadLM32
==
WRS_BOOT_LOAD_LM32_FILE_NOT_FOUND
||
b
->
wrsBootLoadLM32
==
WRS_BOOT_LOAD_LM32_FILE_NOT_FOUND
||
b
->
wrsBootKernelModulesMissing
>
0
/* contain number of missing modules */
||
b
->
wrsBootKernelModulesMissing
>
0
/* contain number of missing modules */
||
b
->
wrsBootUserspaceDaemonsMissing
>
0
/* contain number of missing d
ea
mons */
||
b
->
wrsBootUserspaceDaemonsMissing
>
0
/* contain number of missing d
ae
mons */
)
{
)
{
wrsOSStatus_s
.
wrsBootSuccessful
=
WRS_BOOT_SUCCESSFUL_ERROR
;
wrsOSStatus_s
.
wrsBootSuccessful
=
WRS_BOOT_SUCCESSFUL_ERROR
;
...
...
userspace/wrsw_hal/hal_main.c
View file @
1f2a404f
...
@@ -69,7 +69,7 @@ static int hal_shutdown()
...
@@ -69,7 +69,7 @@ static int hal_shutdown()
return
0
;
return
0
;
}
}
static
void
hal_d
ea
monize
();
static
void
hal_d
ae
monize
();
/* Main initialization function */
/* Main initialization function */
static
int
hal_init
()
static
int
hal_init
()
...
@@ -105,13 +105,13 @@ static int hal_init()
...
@@ -105,13 +105,13 @@ static int hal_init()
shw_io_write
(
shw_io_led_state_g
,
1
);
shw_io_write
(
shw_io_led_state_g
,
1
);
if
(
daemon_mode
)
if
(
daemon_mode
)
hal_d
ea
monize
();
hal_d
ae
monize
();
return
0
;
return
0
;
}
}
/* Turns a nice and well-behaving HAL into an evil servant of satan. */
/* Turns a nice and well-behaving HAL into an evil servant of satan. */
static
void
hal_d
ea
monize
()
static
void
hal_d
ae
monize
()
{
{
pid_t
pid
,
sid
;
pid_t
pid
,
sid
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment