include $(TOPDIR)/rules.mk
PKG_NAME:=sqm-scripts
-PKG_VERSION:=7
-PKG_RELEASE:=3
+PKG_VERSION:=8
+PKG_RELEASE:=1
PKG_LICENSE:=GPLv2
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
define Package/sqm-scripts/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/etc/init.d/sqm $(1)/etc/init.d/sqm
+ $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+ $(INSTALL_BIN) ./files/etc/hotplug.d/iface/11-sqm $(1)/etc/hotplug.d/iface/11-sqm
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/etc/config/sqm $(1)/etc/config/sqm
$(INSTALL_DIR) $(1)/usr/lib/sqm
. /lib/functions.sh
-STOP=$1
+STOP=
ACTIVE_STATE_PREFIX="SQM_active_on_"
ACTIVE_STATE_FILE_DIR="/var/run/SQM"
mkdir -p ${ACTIVE_STATE_FILE_DIR}
+PROTO_STATE_FILE_LIST=$( ls ${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}* 2> /dev/null )
+
+
+case ${1} in
+ stop)
+ logger -t SQM -s "run.sh stop"
+ STOP=$1
+ ;;
+ interface)
+ START_ON_IF=$2 # only process this interface
+ logger -t SQM -s "Re/starting sqm on interface ${START_ON_IF}"
+ # TODO if $2 is empty just bail...
+ if [ -z ${START_ON_IF} ] ;
+ then
+ logger -t SQM -s "Interface name missing, nothing to do, bailing out"
+ return 0
+ fi
+ # only try to restart the just hotplugged interface, so reduce the list of interfaces to stop to the specified one
+ PROTO_STATE_FILE_LIST=${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}${START_ON_IF}
+ ;;
+esac
+
# 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=$( 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
run_simple_qos() {
local section="$1"
export IFACE=$(config_get "$section" interface)
+
+ # If called explicitly for one interface only , so ignore anything else
+ [ -n "${START_ON_IF}" -a "$START_ON_IF" != "$IFACE" ] && return
+ #logger -t SQM -s "marching on..."
+
ACTIVE_STATE_FILE_FQN="${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
# Turn it on. Preserve classification if already performed
+#sm: is it correct to do this in $IFACE? Should ingress not be on $DEV? since HTB acts on $DEV?
+# SQUASH also does not work on $DEV (that is the IFB will still see the incoming ToS bits whether we squash or not)
+# SQUASH is still useful to protect internal machines...
if [ "$SQUASH_DSCP" = "1" ]
then
sqm_logger "Squashing differentiated services code points (DSCP) from ingress."