mirror of
https://github.com/openwrt/packages.git
synced 2026-04-15 19:02:09 +00:00
mwan3: remove pgrep usage
pgrep is pretty slow as it needs to read all /proc/*/cmdline or /proc/*/status, and it's called twice per wan. Add STARTED and PID files to speedup mwan3_get_mwan3track_status(). Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
This commit is contained in:
committed by
Florian Eckert
parent
f93b00fa68
commit
de98fdebef
@@ -94,28 +94,40 @@ readfile() {
|
||||
|
||||
mwan3_get_mwan3track_status()
|
||||
{
|
||||
local track_ips pid
|
||||
local interface=$1
|
||||
local track_ips pid cmdline started
|
||||
mwan3_list_track_ips()
|
||||
{
|
||||
track_ips="$1 $track_ips"
|
||||
}
|
||||
config_list_foreach "$1" track_ip mwan3_list_track_ips
|
||||
config_list_foreach "$interface" track_ip mwan3_list_track_ips
|
||||
|
||||
if [ -n "$track_ips" ]; then
|
||||
pid="$(pgrep -f "mwan3track $1$")"
|
||||
if [ -n "$pid" ]; then
|
||||
if [ "$(cat /proc/"$(pgrep -P $pid)"/cmdline)" = "sleep${MAX_SLEEP}" ]; then
|
||||
tracking="paused"
|
||||
else
|
||||
tracking="active"
|
||||
fi
|
||||
else
|
||||
tracking="down"
|
||||
fi
|
||||
else
|
||||
tracking="disabled"
|
||||
if [ -z "$track_ips" ]; then
|
||||
echo "disabled"
|
||||
return
|
||||
fi
|
||||
echo "$tracking"
|
||||
readfile pid $MWAN3TRACK_STATUS_DIR/$interface/PID 2>/dev/null
|
||||
if [ -z "$pid" ]; then
|
||||
echo "down"
|
||||
return
|
||||
fi
|
||||
readfile cmdline /proc/$pid/cmdline 2>/dev/null
|
||||
if [ $cmdline != "/bin/sh/usr/sbin/mwan3track${interface}" ]; then
|
||||
echo "down"
|
||||
return
|
||||
fi
|
||||
readfile started $MWAN3TRACK_STATUS_DIR/$interface/STARTED
|
||||
case "$started" in
|
||||
0)
|
||||
echo "paused"
|
||||
;;
|
||||
1)
|
||||
echo "active"
|
||||
;;
|
||||
*)
|
||||
echo "down"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
mwan3_init()
|
||||
|
||||
@@ -36,7 +36,7 @@ if_up() {
|
||||
LOG info "Detect ifup event on interface ${INTERFACE} (${DEVICE})"
|
||||
IFDOWN_EVENT=0
|
||||
IFUP_EVENT=1
|
||||
STARTED=1
|
||||
started
|
||||
stop_subprocs
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ connecting() {
|
||||
disabled() {
|
||||
STATUS='disabled'
|
||||
echo "disabled" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
|
||||
STARTED=0
|
||||
stopped
|
||||
}
|
||||
|
||||
firstconnect() {
|
||||
@@ -187,7 +187,7 @@ firstconnect() {
|
||||
|
||||
LOG debug "firstconnect: called on $INTERFACE/$true_iface ($DEVICE). Status is $STATUS. SRC_IP is $SRC_IP"
|
||||
|
||||
STARTED=1
|
||||
started
|
||||
if [ "$STATUS" = "offline" ]; then
|
||||
disconnected 1
|
||||
else
|
||||
@@ -195,6 +195,16 @@ firstconnect() {
|
||||
fi
|
||||
}
|
||||
|
||||
stopped() {
|
||||
STARTED=0
|
||||
echo 0 > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STARTED
|
||||
}
|
||||
|
||||
started() {
|
||||
STARTED=1
|
||||
echo 1 > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STARTED
|
||||
}
|
||||
|
||||
update_status() {
|
||||
local track_ip=$1
|
||||
|
||||
@@ -214,13 +224,13 @@ main() {
|
||||
|
||||
INTERFACE=$1
|
||||
STATUS=""
|
||||
STARTED=0
|
||||
mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
|
||||
echo $$ > $MWAN3TRACK_STATUS_DIR/$INTERFACE/PID
|
||||
stopped
|
||||
TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT
|
||||
|
||||
mwan3_init
|
||||
|
||||
mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
|
||||
|
||||
trap clean_up TERM
|
||||
trap if_down USR1
|
||||
trap if_up USR2
|
||||
|
||||
Reference in New Issue
Block a user