Add sqm-scripts* back to base
[librecmc/librecmc.git] / package / network / config / sqm-scripts-extra / src / test_LAN_triple-isolate__piece_of_cake.qos
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 triple-isolate"
39 EGRESS_CAKE_OPTS="besteffort triple-isolate"
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 }