test_LAN_dual-isolate__piece_of_cake.qos (3522B)
1 #!/bin/sh 2 ################################################################################ 3 # test_LAN_triple-isolate__piece_of_cake.qos (Cero3 Shaper) 4 # 5 # Abstract: 6 # This is a one band cake and ipv6 enabled shaping script for Ethernet 7 # gateways. This exists for the purpose of testing cake's different isolation 8 # options, specifically the non-directional triple-isolate feature that promises 9 # to finally tackle the bit-torrent hole in simple.qos. 10 # This specific version is supposed to be used on LAN interfaces: 11 # the script's ingress direction equals the internet/WAN upload direction 12 # the script's egress direction equals the internet/WAN download direction 13 # 14 # NOTE: Shaping on a LAN interface only affects machines connected via that 15 # LAN interface, so typically WIFI/WLAN traffic will not be shaped! 16 # 17 ################################################################################ 18 # 19 # This program is free software; you can redistribute it and/or modify 20 # it under the terms of the GNU General Public License version 2 as 21 # published by the Free Software Foundation. 22 # 23 # Copyright (C) 2012-2016 24 # Michael D. Taht, Toke Høiland-Jørgensen, Sebastian Moeller 25 # 26 ################################################################################ 27 28 . ${SQM_LIB_DIR}/defaults.sh 29 30 ################################################################################ 31 32 33 # this will only work with cake as qdisc... 34 QDISC=cake 35 36 37 # to keep this as simple as possible we ignore the *_CAKE_OPTS from defaults.sh 38 INGRESS_CAKE_OPTS="besteffort dual-srchost" 39 EGRESS_CAKE_OPTS="besteffort dual-dsthost" 40 41 42 egress() { 43 sqm_debug "egress" 44 $TC qdisc del dev $IFACE root 2>/dev/null 45 $TC qdisc add dev $IFACE root $( get_stab_string ) cake bandwidth ${UPLINK}kbit $( get_cake_lla_string ) ${EGRESS_CAKE_OPTS} ${EQDISC_OPTS} 46 } 47 48 49 ingress() { 50 sqm_debug "ingress" 51 $TC qdisc del dev $IFACE handle ffff: ingress 2>/dev/null 52 $TC qdisc add dev $IFACE handle ffff: ingress 53 $TC qdisc del dev $DEV root 2>/dev/null 54 $TC qdisc add dev $DEV root $( get_stab_string ) cake bandwidth ${DOWNLINK}kbit $( get_cake_lla_string ) ${INGRESS_CAKE_OPTS} ${IQDISC_OPTS} 55 56 $IP link set dev $DEV up 57 58 # redirect all IP packets arriving in $IFACE to ifb0 59 60 $TC filter add dev $IFACE parent ffff: protocol all prio 10 u32 \ 61 match u32 0 0 flowid 1:1 action mirred egress redirect dev $DEV 62 } 63 64 sqm_start() { 65 66 #sm: flip upload and download bandwith so that the GUI values reflect directionality in regard to the ISP 67 #sm: NOTE this is ugly and should be performed in defaults.sh or functions.sh if at all 68 #sm: but for quick and dirty testing this should do 69 local ORIG_UPLINK=${UPLINK} 70 local ORIG_DOWNLINK=${DOWNLINK} 71 UPLINK=${ORIG_DOWNLINK} 72 DOWNLINK=${ORIG_UPLINK} 73 74 75 [ -n "$IFACE" ] || return 1 76 do_modules 77 verify_qdisc $QDISC "cake" || return 1 78 sqm_debug "Starting ${SCRIPT}" 79 80 [ -z "$DEV" ] && DEV=$( get_ifb_for_if ${IFACE} ) 81 82 83 if [ "${UPLINK}" -ne 0 ]; 84 then 85 egress 86 sqm_debug "egress shaping activated" 87 else 88 sqm_debug "egress shaping deactivated" 89 $TC qdisc del dev ${IFACE} root 2> /dev/null 90 fi 91 if [ "${DOWNLINK}" -ne 0 ]; 92 then 93 verify_qdisc ingress "ingress" || return 1 94 ingress 95 sqm_debug "ingress shaping activated" 96 else 97 sqm_debug "ingress shaping deactivated" 98 $TC qdisc del dev ${DEV} root 2> /dev/null 99 $TC qdisc del dev ${IFACE} ingress 2> /dev/null 100 fi 101 return 0 102 }