All pastes #739528 Raw Edit

Mine

public shellscript v1 · immutable
·published 2007-10-17 07:15 UTC
rendered paste body
#!/bin/bash# -------------- HTB Sharper 1.7.3 "rc.htb" -------------#         All rights reserved for B@roo 2000-2005#                     Poprawki Gervys79# ---------------------------------------------------------#set -x# Ladowanie konfiguracji  if [ ! -e ${0%rc.htb}rc.fire_conf ]; then    exit 1  fi    START_FILE="rc.htb"    source ${0%rc.htb}rc.fire_conf  if [ ! "$QOS_ENABLE" == "htb" ]; then    echo -n "HTB QoS fuction is disable."    exit 1  fi# -------- Ladowanie modulow i usuwanie kolejek ------------ip link set imq0 upip link set imq1 upstop(){tc qdisc del root dev imq1 2> /dev/nulltc qdisc del root dev imq0 2> /dev/null}# ----------------- Przeliczenia klas ----------------------start(){    if [ "$NAT_ENABLE" == "MASQUERADE" ]; then        INTERNET_IP=`ifconfig $INTERNET_ETH | grep "inet addr:" | awk '{print $2}' | cut -d ":" -f 2`    fi    DOWNLOAD_ALL_UL=$[$DOWNLOAD*99/100]    DOWNLOAD_ALL=$[$DOWNLOAD*98/100]    DOWNLOAD_PRIO=`echo $QOS_PRIO_BAND | cut -d':' -f1`    DOWNLOAD_CRIT=`echo $QOS_CRIT_BAND | cut -d':' -f1`    if [ ! `echo $QOS_CRIT_BAND | cut -d':' -f3` == "hard" ]; then        DOWNLOAD_CRIT_UL=$DOWNLOAD_ALL_UL        DOWNLOAD_NORMAL=$[$DOWNLOAD_ALL-$DOWNLOAD_CRIT]        DOWNLOAD_NORMAL_UL=$DOWNLOAD_ALL_UL    else        DOWNLOAD_CRIT_UL=$DOWNLOAD_ALL_UL        DOWNLOAD_NORMAL=$[$DOWNLOAD_ALL-$DOWNLOAD_CRIT]        DOWNLOAD_NORMAL_UL=$[$DOWNLOAD_ALL_UL-$DOWNLOAD_CRIT]    fi    if [ "$DOWNLOAD_CRIT" -ge "$[$DOWNLOAD_ALL/2]" ]; then        DOWNLOAD_CRIT_M1=$[$DOWNLOAD_ALL*75/100]    else        DOWNLOAD_CRIT_M1=$[2*$DOWNLOAD_CRIT*85/100]    fi    UPLOAD_ALL_UL=$[$UPLOAD*99/100]    UPLOAD_ALL=$[$UPLOAD*98/100]    UPLOAD_PRIO=`echo $QOS_PRIO_BAND | cut -d':' -f2`    UPLOAD_CRIT=`echo $QOS_CRIT_BAND | cut -d':' -f2`    if [ ! `echo $QOS_CRIT_BAND | cut -d':' -f3` == "hard" ]; then        UPLOAD_CRIT_UL=$UPLOAD_ALL_UL        UPLOAD_NORMAL=$[$UPLOAD_ALL-$UPLOAD_CRIT]        UPLOAD_NORMAL_UL=$UPLOAD_ALL_UL    else        UPLOAD_CRIT_UL=$UPLOAD_ALL_UL        UPLOAD_NORMAL=$[$UPLOAD_ALL-$UPLOAD_CRIT]        UPLOAD_NORMAL_UL=$[$UPLOAD_ALL_UL-$UPLOAD_CRIT]    fi    if [ "$UPLOAD_CRIT" -ge "$[$UPLOAD_ALL/2]" ]; then        UPLOAD_CRIT_M1=$[$UPLOAD_ALL*75/100]    else        UPLOAD_CRIT_M1=$[2*$UPLOAD_CRIT*85/100]    fi    DOWNLOAD_ROUTER=`echo $QOS_ROUTER_BAND | cut -d':' -f1`    UPLOAD_ROUTER=`echo $QOS_ROUTER_BAND | cut -d':' -f3`    if [ ! `echo $QOS_ROUTER_BAND | cut -d':' -f2` == "auto" ]; then        DOWNLOAD_ROUTER_UL=`echo $QOS_ROUTER_BAND | cut -d':' -f2`    else        DOWNLOAD_ROUTER_UL=$DOWNLOAD_NORMAL_UL    fi    if [ ! `echo $QOS_ROUTER_BAND | cut -d':' -f4` == "auto" ]; then        UPLOAD_ROUTER_UL=`echo $QOS_ROUTER_BAND | cut -d':' -f4`    else        UPLOAD_ROUTER_UL=$UPLOAD_NORMAL_UL    fi    USERS_COUNT_DOWN=0    RATE_COUNT_DOWN=0    USERS_COUNT_UP=0    RATE_COUNT_UP=0    if [ ! "$P2P_LIMIT" == "" ]; then        USERS_COUNT_DOWN=1        USERS_COUNT_UP=1    fi    for i in $QOS_ALLOW     do        if [ ! `echo $i | cut -d':' -f2` == "auto" ]; then            TMP=`echo $i | cut -d':' -f2`            RATE_COUNT_DOWN=$[$RATE_COUNT_DOWN+$TMP]        else            USERS_COUNT_DOWN=$[$USERS_COUNT_DOWN+1]        fi        if [ ! `echo $i | cut -d':' -f4` == "auto" ]; then            TMP=`echo $i | cut -d':' -f4`            RATE_COUNT_UP=$[$RATE_COUNT_UP+$TMP]        else            USERS_COUNT_UP=$[$USERS_COUNT_UP+1]        fi     done    if [ ! "$USERS_COUNT_DOWN" == "0" ]; then        DOWNLOAD_USER_RATE=$[($DOWNLOAD_NORMAL-$DOWNLOAD_PRIO-$DOWNLOAD_ROUTER-$RATE_COUNT_DOWN)/$USERS_COUNT_DOWN]    fi    if [ ! "$USERS_COUNT_UP" == "0" ]; then        UPLOAD_USER_RATE=$[($UPLOAD_NORMAL-$UPLOAD_PRIO-$UPLOAD_ROUTER-$RATE_COUNT_UP)/$USERS_COUNT_UP]    fi# P2P   if [ "$P2P_TYPE" == "advanced" ]; then    if [ ! "$P2P_LIMIT" == "" ]; then     DOWNLOAD_ALL_P2P=`echo $P2P_LIMIT | cut -d':' -f1`     UPLOAD_ALL_P2P=`echo $P2P_LIMIT | cut -d':' -f2`     RATE_COUNT_DOWN_P2P=0     USERS_COUNT_DOWN_P2P=0     RATE_COUNT_UP_P2P=0     USERS_COUNT_UP_P2P=0    else     echo "Warning: you must define P2P_LIMIT value in advanced mode"    fi   fi   if [ "$P2P_TYPE" == "advanced" ]; then    if [ ! "$P2P_LIMIT" == "" ]; then    for i in $P2P_USER_LIMIT     do        if [ ! `echo $i | cut -d':' -f2` == "auto" ]; then            TMP=`echo $i | cut -d':' -f2`            RATE_COUNT_DOWN_P2P=$[$RATE_COUNT_DOWN_P2P+$TMP]        else            USERS_COUNT_DOWN_P2P=$[$USERS_COUNT_DOWN_P2P+1]        fi        if [ ! `echo $i | cut -d':' -f4` == "auto" ]; then            TMP=`echo $i | cut -d':' -f4`            RATE_COUNT_UP_P2P=$[$RATE_COUNT_UP_P2P+$TMP]        else            USERS_COUNT_UP_P2P=$[$USERS_COUNT_UP_P2P+1]        fi     done    if [ ! "$USERS_COUNT_DOWN_P2P" == "0" ]; then        DOWNLOAD_USER_RATE_P2P=$[($DOWNLOAD_ALL_P2P-$RATE_COUNT_DOWN_P2P)/$USERS_COUNT_DOWN_P2P]    fi    if [ ! "$USERS_COUNT_UP_P2P" == "0" ]; then        UPLOAD_USER_RATE_P2P=$[($UPLOAD_ALL_P2P-$RATE_COUNT_UP_P2P)/$USERS_COUNT_UP_P2P]    fi    fi   fi# ------------ Tworzenie kolejek - odbieranie ---------------### Tworzenie korzenia kolejek    tc qdisc add dev imq0 root handle 1:0 htb default 100 r2q 4    tc class add dev imq0 parent 1:0 classid 1:1 htb rate ${DOWNLOAD_ALL}kbit ceil ${DOWNLOAD_ALL_UL}kbit### Ruch krytyczny    tc class add dev imq0 parent 1:1 classid 1:2 htb rate ${DOWNLOAD_CRIT_M1}kbit ceil ${DOWNLOAD_CRIT_UL}kbit    tc qdisc add dev imq0 parent 1:2 sfq perturb 5    tc filter add dev imq0 parent 1:0 protocol ip prio 2 handle 0x2 fw flowid 1:2### Ruch normalny    tc class add dev imq0 parent 1:1 classid 1:5 htb rate ${DOWNLOAD_NORMAL}kbit ceil ${DOWNLOAD_NORMAL_UL}kbit  # Ruch priorytetowy    tc class add dev imq0 parent 1:5 classid 1:10 htb rate ${DOWNLOAD_PRIO}kbit ceil ${DOWNLOAD_NORMAL_UL}kbit    tc qdisc add dev imq0 parent 1:10 sfq perturb 5    tc filter add dev imq0 parent 1:0 protocol ip prio 3 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:10     # DNS  # Ruch routera    tc class add dev imq0 parent 1:5 classid 1:20 htb rate ${DOWNLOAD_ROUTER}kbit ceil ${DOWNLOAD_ROUTER_UL}kbit    tc qdisc add dev imq0 parent 1:20 sfq perturb 10    tc filter add dev imq0 parent 1:0 protocol ip prio 4 u32 match ip dst $INTERNET_IP flowid 1:20  # Ruch P2P    if [ "$P2P_TYPE" == "normal" ]; then     if [ ! "$P2P_LIMIT" == "" ]; then        DOWNLOAD_P2P=`echo $P2P_LIMIT | cut -d':' -f1`        tc class add dev imq0 parent 1:5 classid 1:30 htb rate ${DOWNLOAD_USER_RATE}kbit ceil ${DOWNLOAD_P2P}kbit        tc qdisc add dev imq0 parent 1:30 esfq perturb 10 hash dst        tc filter add dev imq0 parent 1:0 protocol ip prio 1 handle 0x30 fw flowid 1:30     fi    fi  # Ruch normalny userow    if [ "$P2P_TYPE" == "normal" ]; then     MARK=100    else     MARK=50     MARK2=500    fi    for i in $QOS_ALLOW    do    DOWN_NORMAL=$DOWNLOAD_USER_RATE    DOWN_CEIL=$DOWNLOAD_NORMAL_UL    ADDRESS=`echo $i | cut -d':' -f1`    if [ ! `echo $i | cut -d':' -f2` == "auto" ]; then        DOWN_NORMAL=`echo $i | cut -d':' -f2`    fi    if [ ! `echo $i | cut -d':' -f3` == "auto" ]; then        DOWN_CEIL=`echo $i | cut -d':' -f3`        DL="ceil ${DOWN_CEIL}kbit"    else        DL="ceil ${DOWN_CEIL}kbit"    fi    if [ $DOWN_NORMAL -ge $DOWN_CEIL ]; then        DOWN_NORMAL=$DOWN_CEIL    fi     if [ "$P2P_TYPE" == "normal" ]; then      tc class add dev imq0 parent 1:5 classid 1:${MARK} htb rate ${DOWN_NORMAL}kbit $DL      if [ "$QOS_ALLOW_METHOD" == "esfq" ]; then        tc qdisc add dev imq0 parent 1:${MARK} esfq perturb 10 hash dst      elif [ "$QOS_ALLOW_METHOD" == "sfq" ]; then        tc qdisc add dev imq0 parent 1:${MARK} sfq perturb 10      else        tc qdisc add dev imq0 parent 1:${MARK} sfq perturb 10      fi      tc filter add dev imq0 parent 1:0 protocol ip prio 5 u32 match ip dst $ADDRESS flowid 1:${MARK}      MARK=$[$MARK+1]     elif [ "$P2P_TYPE" == "advanced" ]; then      tc class add dev imq0 parent 1:5 classid 1:${MARK} htb rate ${DOWN_NORMAL}kbit $DL      if [ "$QOS_ALLOW_METHOD" == "esfq" ]; then        tc qdisc add dev imq0 parent 1:${MARK} esfq perturb 10 hash dst      elif [ "$QOS_ALLOW_METHOD" == "sfq" ]; then        tc qdisc add dev imq0 parent 1:${MARK} sfq perturb 10      else        tc qdisc add dev imq0 parent 1:${MARK} sfq perturb 10      fi      tc class add dev imq0 parent 1:${MARK} classid 1:${MARK2} htb rate ${DOWN_NORMAL}kbit $DL      if [ "$QOS_ALLOW_METHOD" == "esfq" ]; then        tc qdisc add dev imq0 parent 1:${MARK2} esfq perturb 10 hash dst      elif [ "$QOS_ALLOW_METHOD" == "sfq" ]; then        tc qdisc add dev imq0 parent 1:${MARK2} sfq perturb 10      else        tc qdisc add dev imq0 parent 1:${MARK2} sfq perturb 10      fi      tc filter add dev imq0 parent 1:0 protocol ip prio 5 u32 match ip dst $ADDRESS flowid 1:${MARK2}      MARK=$[$MARK+1]      MARK2=$[$MARK2+2]     fi    done  # Ruch p2p userow    if [ "$P2P_TYPE" == "advanced" ]; then    MARK=50    MARK2=501    for i in $P2P_USER_LIMIT     do      DOWN_NORMAL_P2P=$DOWNLOAD_USER_RATE_P2P      DOWN_CEIL_P2P=`echo $P2P_LIMIT | cut -d':' -f1`      if [ ! `echo $i | cut -d':' -f2` == "auto" ]; then        DOWN_NORMAL_P2P=`echo $i | cut -d':' -f2`      fi      if [ ! `echo $i | cut -d':' -f3` == "auto" ]; then        DOWN_CEIL_P2P=`echo $i | cut -d':' -f3`        DL_P2P="ceil ${DOWN_CEIL_P2P}kbit"      else        DL_P2P="ceil ${DOWN_CEIL_P2P}kbit"      fi      if [ $DOWN_NORMAL_P2P -ge $DOWN_CEIL_P2P ]; then        DOWN_NORMAL_P2P=$DOWN_CEIL_P2P      fi      tc class add dev imq0 parent 1:${MARK} classid 1:${MARK2} htb rate ${DOWN_NORMAL_P2P}kbit $DL_P2P      tc qdisc add dev imq0 parent 1:${MARK2} esfq perturb 10 hash dst      tc filter add dev imq0 parent 1:0 protocol ip prio 1 handle 0x${MARK2} fw flowid 1:${MARK2}      MARK=$[$MARK+1]      MARK2=$[$MARK2+2]     done# ------------- Tworzenie kolejek - wysylanie ----------------### Tworzenie korzenia kolejek    if [ "$P2P_TYPE" == "normal" ]; then     tc qdisc add dev imq1 root handle 1:0 htb default 100 r2q 4    else     tc qdisc add dev imq1 root handle 1:0 htb default 50 r2q 4    fi    tc class add dev imq1 parent 1:0 classid 1:1 htb rate ${UPLOAD_ALL}kbit ceil ${UPLOAD_ALL_UL}kbit### Ruch krytyczny    tc class add dev imq1 parent 1:1 classid 1:2 htb rate ${UPLOAD_CRIT_M1}kbit ceil ${UPLOAD_CRIT_UL}kbit    tc qdisc add dev imq1 parent 1:2 sfq perturb 5    tc filter add dev imq1 parent 1:0 protocol ip prio 2 handle 0x2 fw flowid 1:2### Ruch normalny    tc class add dev imq1 parent 1:1 classid 1:5 htb rate ${UPLOAD_NORMAL}kbit ceil ${UPLOAD_NORMAL_UL}kbit  # Ruch priorytetowy    tc class add dev imq1 parent 1:5 classid 1:10 htb rate ${UPLOAD_PRIO}kbit ceil ${UPLOAD_NORMAL_UL}kbit    tc qdisc add dev imq1 parent 1:10 sfq perturb 5    tc filter add dev imq1 parent 1:0 protocol ip prio 3 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:10     # DNS    tc filter add dev imq1 parent 1:0 protocol ip prio 3 u32 match ip protocol 6 0xff \    match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10                                   # ACK  # Ruch routera    tc class add dev imq1 parent 1:5 classid 1:20 htb rate ${UPLOAD_ROUTER}kbit ceil ${UPLOAD_ROUTER_UL}kbit    tc qdisc add dev imq1 parent 1:20 sfq perturb 10    tc filter add dev imq1 parent 1:0 protocol ip prio 4 handle 0x20 fw flowid 1:20  # Ruch P2P    if [ "$P2P_TYPE" == "normal" ]; then     if [ ! "$P2P_LIMIT" == "" ]; then        UPLOAD_P2P=`echo $P2P_LIMIT | cut -d':' -f2`        tc class add dev imq1 parent 1:5 classid 1:30 htb rate ${UPLOAD_USER_RATE}kbit ceil ${UPLOAD_P2P}kbit        tc qdisc add dev imq1 parent 1:30 esfq perturb 10 hash src        tc filter add dev imq1 parent 1:0 protocol ip prio 1 handle 0x30 fw flowid 1:30     fi    fi  # Ruch normalny userow    if [ "$P2P_TYPE" == "normal" ]; then     MARK=100    else     MARK=50     MARK2=500     MARK3=100    fi    for i in $QOS_ALLOW    do    UP_NORMAL=$UPLOAD_USER_RATE    UP_CEIL=$UPLOAD_NORMAL_UL    if [ ! `echo $i | cut -d':' -f4` == "auto" ]; then        UP_NORMAL=`echo $i | cut -d':' -f4`    fi    if [ ! `echo $i | cut -d':' -f5` == "auto" ]; then        UP_CEIL=`echo $i | cut -d':' -f5`        UL="ceil ${UP_CEIL}kbit"    else        UL="ceil ${UP_CEIL}kbit"    fi    if [ $UP_NORMAL -ge $UP_CEIL ]; then        UP_NORMAL=$UP_CEIL    fi     if [ "$P2P_TYPE" == "normal" ]; then      tc class add dev imq1 parent 1:5 classid 1:${MARK} htb rate ${UP_NORMAL}kbit $UL      if [ "$QOS_ALLOW_METHOD" == "esfq" ]; then        tc qdisc add dev imq1 parent 1:${MARK} esfq perturb 10 hash src      elif [ "$QOS_ALLOW_METHOD" == "sfq" ]; then        tc qdisc add dev imq1 parent 1:${MARK} sfq perturb 10      else        tc qdisc add dev imq1 parent 1:${MARK} sfq perturb 10      fi      tc filter add dev imq1 parent 1:0 protocol ip prio 5 handle 0x${MARK} fw flowid 1:${MARK}      MARK=$[$MARK+1]     elif [ "$P2P_TYPE" == "advanced" ]; then      tc class add dev imq1 parent 1:5 classid 1:${MARK} htb rate ${UP_NORMAL}kbit $UL      if [ "$QOS_ALLOW_METHOD" == "esfq" ]; then        tc qdisc add dev imq1 parent 1:${MARK} esfq perturb 10 hash src      elif [ "$QOS_ALLOW_METHOD" == "sfq" ]; then        tc qdisc add dev imq1 parent 1:${MARK} sfq perturb 10      else        tc qdisc add dev imq1 parent 1:${MARK} sfq perturb 10      fi      tc class add dev imq1 parent 1:${MARK} classid 1:${MARK2} htb rate ${UP_NORMAL}kbit $UL      if [ "$QOS_ALLOW_METHOD" == "esfq" ]; then        tc qdisc add dev imq1 parent 1:${MARK2} esfq perturb 10 hash src      elif [ "$QOS_ALLOW_METHOD" == "sfq" ]; then        tc qdisc add dev imq1 parent 1:${MARK2} sfq perturb 10      else        tc qdisc add dev imq1 parent 1:${MARK2} sfq perturb 10      fi      tc filter add dev imq1 parent 1:0 protocol ip prio 5 handle 0x${MARK3} fw flowid 1:${MARK2}      MARK=$[$MARK+1]      MARK2=$[$MARK2+2]      MARK3=$[$MARK3+1]     fi    done  # Ruch p2p userow    if [ "$P2P_TYPE" == "advanced" ]; then    MARK=50    MARK2=501    for i in $P2P_USER_LIMIT    do     UP_NORMAL_P2P=$UPLOAD_USER_RATE_P2P     UP_CEIL_P2P=`echo $P2P_LIMIT | cut -d':' -f2`     if [ ! `echo $i | cut -d':' -f4` == "auto" ]; then        UP_NORMAL_P2P=`echo $i | cut -d':' -f4`     fi     if [ ! `echo $i | cut -d':' -f5` == "auto" ]; then        UP_CEIL_P2P=`echo $i | cut -d':' -f5`        UL_P2P="ceil ${UP_CEIL_P2P}kbit"     else        UL_P2P="ceil ${UP_CEIL_P2P}kbit"     fi     if [ $UP_NORMAL_P2P -ge $UP_CEIL_P2P ]; then        UP_NORMAL_P2P=$UP_CEIL_P2P     fi       tc class add dev imq1 parent 1:${MARK} classid 1:${MARK2} htb rate ${UP_NORMAL_P2P}kbit $UL_P2P       tc qdisc add dev imq1 parent 1:${MARK2} esfq perturb 10 hash src       tc filter add dev imq1 parent 1:0 protocol ip prio 1 handle 0x${MARK2} fw flowid 1:${MARK2}       MARK=$[$MARK+1]       MARK2=$[$MARK2+2]     done    fifi}# -------------------- { start | stop } ----------------------case "$1" in    'start')        echo "Starting HTB Sharper 1.7.3 STABLE ... - All rights reserved for B@roo 2000-2005"        echo "                          Poprawki Gervys79"        echo "                                  HTB"        echo "--------------------------------------------------------------------------------"        stop        start        ;;    'stop')        echo "Stopping HTB Sharper 1.7.3 STABLE ... - All rights reserved for B@roo 2000-2005"        echo "                          Poprawki Gervys79"        echo "--------------------------------------------------------------------------------"        stop        ;;    *)        echo -e "\n Usage: rc.htb { start | stop }"        ;;esac