From b0a014b7f83f160c036d8910e90d1262321e2d12 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 5 Jan 2016 21:00:19 +0000 Subject: [PATCH] QoS: Improve saving enabled/disable state It was reported that the QoS did not stop when the user clicked the "stop" button. This patch fixes that. Fixes #10664 Signed-off-by: Michael Tremer Acked-by: Arne Fitzenreiter --- config/rootfiles/core/97/filelists/files | 2 ++ config/rootfiles/core/97/update.sh | 3 +++ html/cgi-bin/qos.cgi | 9 +++----- src/misc-progs/qosctrl.c | 28 ++++++++++++++++++++---- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/config/rootfiles/core/97/filelists/files b/config/rootfiles/core/97/filelists/files index df2e4880c7..22fc4f0245 100644 --- a/config/rootfiles/core/97/filelists/files +++ b/config/rootfiles/core/97/filelists/files @@ -1,4 +1,6 @@ etc/system-release etc/issue srv/web/ipfire/cgi-bin/ovpnmain.cgi +srv/web/ipfire/cgi-bin/qos.cgi usr/bin/pgrep +usr/local/bin/qosctrl diff --git a/config/rootfiles/core/97/update.sh b/config/rootfiles/core/97/update.sh index e6d4f21b79..85131da83f 100644 --- a/config/rootfiles/core/97/update.sh +++ b/config/rootfiles/core/97/update.sh @@ -43,6 +43,9 @@ extract_files # Start services /etc/init.d/dnsmasq start +# Delete old QoS enabled indicator +rm -f /var/ipfire/qos/enable + # This update need a reboot... #touch /var/run/need_reboot diff --git a/html/cgi-bin/qos.cgi b/html/cgi-bin/qos.cgi index 39c3ed8431..590ad15bff 100644 --- a/html/cgi-bin/qos.cgi +++ b/html/cgi-bin/qos.cgi @@ -463,18 +463,16 @@ if ($qossettings{'ACTION'} eq $Lang::tr{'start'}) $qossettings{'ENABLED'} = 'on'; &General::writehash("${General::swroot}/qos/settings", \%qossettings); system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); - system("/usr/bin/touch /var/ipfire/qos/enable"); system("/usr/local/bin/qosctrl start >/dev/null 2>&1"); system("logger -t ipfire 'QoS started'"); } elsif ($qossettings{'ACTION'} eq $Lang::tr{'stop'}) { - system("/usr/local/bin/qosctrl stop >/dev/null 2>&1"); - unlink "/var/ipfire/qos/bin/qos.sh"; - unlink "/var/ipfire/qos/enable"; - system("logger -t ipfire 'QoS stopped'"); $qossettings{'ENABLED'} = 'off'; &General::writehash("${General::swroot}/qos/settings", \%qossettings); + system("/usr/local/bin/qosctrl stop >/dev/null 2>&1"); + system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); + system("logger -t ipfire 'QoS stopped'"); } elsif ($qossettings{'ACTION'} eq $Lang::tr{'restart'}) { @@ -587,7 +585,6 @@ END $qossettings{'ENABLED'} = 'on'; &General::writehash("${General::swroot}/qos/settings", \%qossettings); system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); - system("/usr/bin/touch /var/ipfire/qos/enable"); system("/usr/local/bin/qosctrl start >/dev/null 2>&1"); system("logger -t ipfire 'QoS started'"); } else { diff --git a/src/misc-progs/qosctrl.c b/src/misc-progs/qosctrl.c index b8317466b6..c00dbcf7ce 100644 --- a/src/misc-progs/qosctrl.c +++ b/src/misc-progs/qosctrl.c @@ -12,12 +12,14 @@ #include #include #include "setuid.h" +#include "libsmooth.h" #define QOS_SH "/var/ipfire/qos/bin/qos.sh" int main(int argc, char *argv[]) { - + struct keyvalue* kv = NULL; int fd = -1; + int r = 0; if (!(initsetuid())) exit(1); @@ -28,14 +30,28 @@ int main(int argc, char *argv[]) { } if (strcmp(argv[1], "generate") == 0) { - safe_system("/usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > " QOS_SH); + kv = initkeyvalues(); + if (!readkeyvalues(kv, CONFIG_ROOT "/qos/settings")) { + fprintf(stderr, "Cannot read QoS settings\n"); + r = 1; + goto END; + } + + char enabled[STRING_SIZE]; + if (!findkey(kv, "ENABLED", enabled)) + strcpy(enabled, "off"); + + if (strcmp(enabled, "on") == 0) + safe_system("/usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > " QOS_SH); + else + unlink(QOS_SH); } if ((fd = open(QOS_SH, O_RDONLY)) != -1) { close(fd); } else { // If there is no qos.sh do nothing. - exit(0); + goto END; } safe_system("chmod 755 " QOS_SH " &>/dev/null"); @@ -53,5 +69,9 @@ int main(int argc, char *argv[]) { exit(1); } - return 0; +END: + if (kv) + freekeyvalues(kv); + + return r; } -- 2.39.5