From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mout.gmx.net", Issuer "TeleSec ServerPass DE-1" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id DFE2021F380 for ; Sun, 15 Feb 2015 08:12:54 -0800 (PST) Received: from hms-beagle.home.lan ([217.247.217.70]) by mail.gmx.com (mrgmx102) with ESMTPSA (Nemesis) id 0Lkiqm-1XomzI06h2-00aZAt; Sun, 15 Feb 2015 17:12:44 +0100 Content-Type: multipart/mixed; boundary="Apple-Mail=_CB5EEEB3-7A00-4A71-ADB0-94A30CF3091A" Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) From: Sebastian Moeller In-Reply-To: <87r3tri2x3.fsf@toke.dk> Date: Sun, 15 Feb 2015 17:12:41 +0100 Message-Id: <9EB28655-6E25-470B-A13B-036EE00D84D7@gmx.de> References: <54E0AFB2.5040806@gmail.com> <87vbj3i5hz.fsf@toke.dk> <87r3tri2x3.fsf@toke.dk> To: =?iso-8859-1?Q?Toke_H=F8iland-J=F8rgensen?= X-Mailer: Apple Mail (2.1878.6) X-Provags-ID: V03:K0:gUrv4Xy6dUnpebYwMNlXDeVYWgnaE7d9HDeJI8aB2nZGPgiBpfb DbPjSTCGW85lYWtX1AlmE5gNil+dHKJmrH2grN8jAXZrqQgbIGcs9vBtZBs6TZ/ClEdkdh1 0rXhNkLde4r8VgtKEiklC6lLsR/6KNyJC8tuJ9+4p3NASnQh3Bkt/9hBAXrfQoqm9J6SdRA mdVr9r9bNHJExIb2qunBA== X-UI-Out-Filterresults: notjunk:1; Cc: Alan Jenkins , openwrt-devel@lists.openwrt.org, luis@bitamins.net, cerowrt-devel@lists.bufferbloat.net Subject: Re: [Cerowrt-devel] [sqm-scripts] not started at boot? X-BeenThere: cerowrt-devel@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: Development issues regarding the cerowrt test router project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 15 Feb 2015 16:13:23 -0000 --Apple-Mail=_CB5EEEB3-7A00-4A71-ADB0-94A30CF3091A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=windows-1252 Hi Toke, On Feb 15, 2015, at 16:56 , Toke H=F8iland-J=F8rgensen = wrote: > Sebastian Moeller writes: >=20 >> I am not sure that this works as intended. The first thing >> run.sh does is take down all running SQM instances: >=20 > Ah yes, seems I was a bit too trigger-happy there ;) >=20 > Here's a version of run.sh that should also short-circuit the 'down' > part if called from hotplug. >=20 > The alternative is, of course, to have logic in the hotplug script to > only call run.sh for interfaces that are enabled, but that would = require > parsing /etc/config/sqm from there. My initial thought was that > short-circuiting the logic in run.sh was 'cleaner'; but I'm not = entirely > sure about that... Thoughts? Not that I have shown great taste in the past, but I think it = would be somewhat cleaner to put the logic into the hot plug script and = keep run.sh =93simple=94 (in the past I had introduced a large number of = leakage, especially of IFBs by not properly removing/stopping old = instances and was quite happy to have the take all active interfaces = down loop as a last defense against accidental leaks).=20 But I am now also running pppoe directly from cerowrt and see = the same issue, sqm is confused when the pppoe interface temporarily = goes away, so at least I can now test this issue ;) Best Regards Sebastian >=20 > -Toke >=20 --Apple-Mail=_CB5EEEB3-7A00-4A71-ADB0-94A30CF3091A Content-Disposition: attachment; filename=run.sh Content-Type: text/x-sh; name="run.sh" Content-Transfer-Encoding: quoted-printable #!/bin/sh # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # Copyright (C) 2012-4 Michael D. Taht, Toke H=C3=B8iland-J=C3=B8rge= nsen, Sebastian Moeller . /lib/functions.sh STOP=3D$1 ACTIVE_STATE_PREFIX=3D"SQM_active_on_" ACTIVE_STATE_FILE_DIR=3D"/var/run/SQM" mkdir -p ${ACTIVE_STATE_FILE_DIR} # the current uci config file does not necessarily contain sections for = all interfaces with active # SQM instances, so use the ACTIVE_STATE_FILES to detect the interfaces = on which to stop SQM. # Currently the .qos scripts start with stopping any existing traffic = shaping so this should not # effectively change anything... PROTO_STATE_FILE_LIST=3D$( ls = ${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}* 2> /dev/null ) for STATE_FILE in ${PROTO_STATE_FILE_LIST} ; do if [ -f ${STATE_FILE} ] ; then STATE_FILE_BASE_NAME=3D$( basename ${STATE_FILE} ) = CURRENT_INTERFACE=3D${STATE_FILE_BASE_NAME:${#ACTIVE_STATE_PREFIX}:$(( = ${#STATE_FILE_BASE_NAME} - ${#ACTIVE_STATE_PREFIX} ))} =20 # If called from hotplug, $DEVICE will be the interface that got = hotplugged, so ignore anything else if [ -z "$DEVICE" -o "$DEVICE" =3D=3D "$CURRENT_INTERFACE" ]; = then logger -t SQM -s "${0} Stopping SQM on interface: = ${CURRENT_INTERFACE}" /usr/lib/sqm/stop.sh ${CURRENT_INTERFACE} rm ${STATE_FILE} # well, we stop it so it is not = running anymore and hence no active state file needed... fi fi done config_load sqm run_simple_qos() { local section=3D"$1" export IFACE=3D$(config_get "$section" interface) # If called from hotplug, $DEVICE will be the interface that got = hotplugged, so ignore anything else [ -n "$DEVICE" -a "$DEVICE" !=3D "$IFACE" ] && return = ACTIVE_STATE_FILE_FQN=3D"${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}${= IFACE}" # this marks interfaces as active with SQM [ -f "${ACTIVE_STATE_FILE_FQN}" ] && logger -t SQM -s "Uh, oh, = ${ACTIVE_STATE_FILE_FQN} should already be stopped." # Not supposed = to happen if [ $(config_get "$section" enabled) -ne 1 ]; then if [ -f "${ACTIVE_STATE_FILE_FQN}" ]; then # this should not be possible, delete after testing local SECTION_STOP=3D"stop" # it seems the user just = de-selected enable, so stop the active SQM else logger -t SQM -s "${0} SQM for interface ${IFACE} is not = enabled, skipping over..." return 0 # since SQM is not active on the current = interface nothing to do here fi fi export UPLINK=3D$(config_get "$section" upload) export DOWNLINK=3D$(config_get "$section" download) export LLAM=3D$(config_get "$section" = linklayer_adaptation_mechanism) export LINKLAYER=3D$(config_get "$section" linklayer) export OVERHEAD=3D$(config_get "$section" overhead) export STAB_MTU=3D$(config_get "$section" tcMTU) export STAB_TSIZE=3D$(config_get "$section" tcTSIZE) export STAB_MPU=3D$(config_get "$section" tcMPU) export ILIMIT=3D$(config_get "$section" ilimit) export ELIMIT=3D$(config_get "$section" elimit) export ITARGET=3D$(config_get "$section" itarget) export ETARGET=3D$(config_get "$section" etarget) export IECN=3D$(config_get "$section" ingress_ecn) export EECN=3D$(config_get "$section" egress_ecn) export IQDISC_OPTS=3D$(config_get "$section" iqdisc_opts) export EQDISC_OPTS=3D$(config_get "$section" eqdisc_opts) export TARGET=3D$(config_get "$section" target) export SQUASH_DSCP=3D$(config_get "$section" squash_dscp) export SQUASH_INGRESS=3D$(config_get "$section" squash_ingress) export QDISC=3D$(config_get "$section" qdisc) export SCRIPT=3D/usr/lib/sqm/$(config_get "$section" script) # # there should be nothing left to stop, so just avoid calling = the script if [ "$STOP" =3D=3D "stop" -o "$SECTION_STOP" =3D=3D "stop" ]; then=20 # /usr/lib/sqm/stop.sh # [ -f ${ACTIVE_STATE_FILE_FQN} ] && rm = ${ACTIVE_STATE_FILE_FQN} # conditional to avoid errors = ACTIVE_STATE_FILE_FQN does not exist anymore # $(config_set "$section" enabled 0) # this does not save to = the config file only to the loaded memory representation logger -t SQM -s "${0} SQM qdiscs on ${IFACE} removed" return 0 fi logger -t SQM -s "${0} Queue Setup Script: ${SCRIPT}" [ -x "$SCRIPT" ] && { $SCRIPT ; touch ${ACTIVE_STATE_FILE_FQN}; = } } config_foreach run_simple_qos --Apple-Mail=_CB5EEEB3-7A00-4A71-ADB0-94A30CF3091A Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > --Apple-Mail=_CB5EEEB3-7A00-4A71-ADB0-94A30CF3091A--