1 (edytowany przez ro_beri 2015-11-08 18:59:37)

Temat: QoS według numerów IP [do sprawdzenia]

Kolejny etap przesiadki z Gargoyle na CC...

Konfig: TL-WR1043NDv2 i CC47390 od Cezarego.

Założenia: każdy user z Wifi dostaje stały, sztywny przydział pasma DL i UP.

Po przeczytaniu kilku tutoriali i opisów a przede wszystkim poradnika morfika dotarłem do czegoś takiego co poniżej. Prośba do osób lepiej ogarniających to ode mnie, aby sprawdzić kod skryptu czy ma to ręce i nogi.

Interface: wlan0-1
IP: 192.168.1.0/24
ifb0 -> upload
ifb1 -> download

#!/bin/sh /etc/rc.common

START=70
EXTRA_COMMANDS="status"

INTERFACE="wlan0-1"

status() {
  echo "----### Statistics ###------"
  echo "----# qdiscs $INTERFACE #---"
  tc -s qdisc show dev $INTERFACE
  echo "----# qdiscs ifb0 #---------"
  tc -s qdisc show dev $INTERFACE
  echo "----# qdiscs ifb1 #---------"
  tc -s qdisc show dev $INTERFACE
  echo "----# class $INTERFACE #----"
  tc -s class show dev $INTERFACE
  echo "----# class ifb0 (out) #----"
  tc -s class show dev ifb0
  echo "----# class ifb1 (in) #-----"
  tc -s class show dev ifb1
  echo "----# filter #--------------"
  tc -s filter show dev $INTERFACE root
  tc -s filter show dev $INTERFACE parent 1:
  tc -s filter show dev $INTERFACE parent 11:
  echo "----# filter ifb0 #---------"
  tc -s filter show dev ifb0
  echo "----# filter ifb1 #---------"
  tc -s filter show dev ifb1
}

start() {
  ifconfig ifb0 up
  ifconfig ifb1 up

  ifconfig ifb0 txqueuelen 8
  ifconfig ifb1 txqueuelen 8

  tc qdisc add dev $INTERFACE parent root handle 1:0 htb
    tc filter add dev $INTERFACE parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb0
  tc qdisc add dev $INTERFACE handle ffff: ingress
    tc filter add dev $INTERFACE parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 2:1 action mirred egress redirect dev ifb1

  tc qdisc add dev ifb0 root handle 1:0 htb default 300
    tc class add dev ifb0 parent 1:0 classid 1:1 htb rate 102400kbit
    for i in `seq 2 255` ; do
      tc class add dev ifb0 parent 1:1 classid 1:$i htb rate 2048kbit prio 2
    done
    tc class add dev ifb0 parent 1:1 classid 1:300 htb rate 4096kbit prio 3

  tc qdisc add dev ifb1 root handle 2:0 htb default 300
    tc class add dev ifb1 parent 2:0 classid 2:1 htb rate 102400kbit
    for i in `seq 2 255` ; do
      tc class add dev ifb1 parent 2:1 classid 2:$i htb rate 2048kbit prio 2
    done
    tc class add dev ifb1 parent 2:1 classid 2:300 htb rate 4096kbit prio 3

  for i in `seq 2 255` ; do
    tc filter add dev ifb0 parent 1:0 protocol ip prio 80 u32 match ip dst 192.168.1.$i classid 1:$i
  done

  for i in `seq 2 255` ; do
    tc filter add dev ifb1 parent 2:0 protocol ip prio 80 u32 match ip src 192.168.1.$i classid 2:$i
  done
}

stop() {
  tc qdisc del dev $INTERFACE root 2>&1
  tc qdisc del dev ifb0 root 2>&1
  tc qdisc del dev ifb1 root 2>&1
  tc qdisc del dev $INTERFACE ingress 2>&1

  ifconfig ifb0 down
  ifconfig ifb1 down
}