All of lore.kernel.org
 help / color / mirror / Atom feed
* [LARTC] Fw: Traffic Shaping for 80 Users on Lan
@ 2003-05-10  2:27 Osgaldo Suanzes
  2003-05-11 19:29 ` Ethan Sommer
  0 siblings, 1 reply; 2+ messages in thread
From: Osgaldo Suanzes @ 2003-05-10  2:27 UTC (permalink / raw)
  To: lartc





> Hi ,
>
>     I dont know if this has been asked before (sorry)
>
>    I need to shape traffic on Lan1 to 1 Meg Download,(Internet
Downstream=2
> Meg)  and that everyone on that Lan
>    has the same amount of traffic bandwidth available for download, (1
> user\x100%, 2 userP% each 3 users3,3%....etc)
>    I read about sfq, and esfq but it seems that I have to write a line for
> every user (in my case about 80 users) .
>    So that it creates for each flow(user/port?) a new Band, right?
>    This could be a solution, but I still have no clue how this script has
to
> look like, but it has to be a "Huge" script since
>     I have a lot of users(total 190), different places, more users, more
> Unknown Ip Adresses  to figure out..... :)
>
>    Anyone can give me a "example script" for My Case with a bit
explanation.
> so I can work with it?
>
>    Ok this sound weird but... Is there a way to do a "2 Line script"
> instead?? (and let TC do the Fair Queing) like:
>    *  Create qdisc on eth1 with maximum bandwith 1 Meg....and no need to
> specify any ip addresses of the users????
>
>
>         Could someone please send me something to start with, Im
desperate!
>
>                 regards Osgaldo.
>
>                             (sorry for the bad english)
>
> PD: The How to is quite good for understand a bit about Traffic Shaping,
But
> I think It lacks of Real Scenario examples.
>         The HTB page is quiet good, good examples but in this case I think
> HTB is not the one I need for my Scenario, right?
>         Couldnt find neither on Stef Coene page some example scripts on my
> Subject.
>        (Sorry Stef didnt mean to anger you,I believe you have done a great
> job with your site)
>         But I think it would be great if everyone could send to the How To
> Maintainer their Scenario scripts to include for Future
>          reference for everyone in the How To, what do you think?
>
>

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [LARTC] Fw: Traffic Shaping for 80 Users on Lan
  2003-05-10  2:27 [LARTC] Fw: Traffic Shaping for 80 Users on Lan Osgaldo Suanzes
@ 2003-05-11 19:29 ` Ethan Sommer
  0 siblings, 0 replies; 2+ messages in thread
From: Ethan Sommer @ 2003-05-11 19:29 UTC (permalink / raw)
  To: lartc

>
>
>>   I need to shape traffic on Lan1 to 1 Meg Download,(Internet
>>    
>>
>Downstream=2
>  
>
>>Meg)  and that everyone on that Lan
>>   has the same amount of traffic bandwidth available for download, (1
>>user\x100%, 2 userP% each 3 users3,3%....etc)
>>   I read about sfq, and esfq but it seems that I have to write a line for
>>every user (in my case about 80 users) .
>>   So that it creates for each flow(user/port?) a new Band, right?
>>    
>>
...

>>   Anyone can give me a "example script" for My Case with a bit
>>    
>>
>explanation.
>  
>
>>so I can work with it?
>>
>>    
>>

I have a script which does something similar. Assuming you have a 
/etc/hosts file with all the hosts: (it is somewhat more complicated 
because it lives between our resnet and the rest of campus and I don't 
want to shape down traffic going to campus much (if at all))


#/bin/bash

###########################################
### ALL CONFIGURATION SHOULD BE UP HERE ###
###########################################

### bandwidth settings

#daily quota in bytes
#QUOTA\x1000000000

#total internal bandwidth
INTRABANDWIDTH\x10mbit
#total external bandwidth
INTERBANDWIDTH=.4mbit
#the difference between intra and inter
DIFFBANDWIDTH=8mbit


#bandwidth for the unregistered ips.. probably not much...
UNREGISTEREDBW\x16kbit

BASEBANDWIDTH=1kbit

#bandwidth for jail
#JAILBANDWIDTH=.1mbit
#rest of bandwidth (inter-jail)
#RESTBANDWIDTH=1mbit


### interfaces and ips

#interface to shape (should probably be one facing world)
SHAPEINTERFACE=eth0
#interface to watch (usually the same as SHAPEINTERFACE)
WATCHINTERFACE=eth0

LOCALNET\x137.22.0.0
LOCALNETNETMASK\x16

#######################################
### BEGIN NON-CONFIGURATION SECTION ###
#######################################


initqos() {
    #remove the old qos rules
    echo tc qdisc del root dev $SHAPEINTERFACE
    tc qdisc del root dev $SHAPEINTERFACE

    #create the root queue
    echo tc qdisc add dev $SHAPEINTERFACE root handle 1: htb default 20
    tc qdisc add dev $SHAPEINTERFACE root handle 1: htb default 20
   
    #create the root class
    echo tc class add dev $SHAPEINTERFACE parent 1: classid 1:1 htb rate 
$INTRABANDWIDTH burst 15k
    tc class add dev $SHAPEINTERFACE parent 1: classid 1:1 htb rate 
$INTRABANDWIDTH burst 15k
   
    #create the class for the intranet
    echo tc class add dev $SHAPEINTERFACE parent 1:1 classid 1:10 htb 
rate $DIFFBANDWIDTH ceil $INTRABANDWIDTH burst 15k
    tc class add dev $SHAPEINTERFACE parent 1:1 classid 1:10 htb rate 
$DIFFBANDWIDTH ceil $INTRABANDWIDTH burst 15k
    #create the "default" class which will include everything else 
(probably the internet)
    echo tc class add dev $SHAPEINTERFACE parent 1:1 classid 1:20 htb 
rate $INTERBANDWIDTH burst 15k
    tc class add dev $SHAPEINTERFACE parent 1:1 classid 1:20 htb rate 
$INTERBANDWIDTH burst 15k

    #add a queue to handle all the local net requests
    echo tc qdisc add dev $SHAPEINTERFACE parent 1:10 handle 10: sfq 
perturb 10
    tc qdisc add dev $SHAPEINTERFACE parent 1:10 handle 10: sfq perturb 10

   
    #create the filter to pick out the intranet from all the packets
    echo tc filter add dev $SHAPEINTERFACE protocol ip parent 1:0 prio 1 
u32 \
        match ip src $LOCALNET/$LOCALNETNETMASK flowid 1:10
    tc filter add dev $SHAPEINTERFACE protocol ip parent 1:0 prio 1 u32 \
        match ip src $LOCALNET/$LOCALNETNETMASK flowid 1:10
  #add the htb queue to make the good go fast to the internet and the 
bad go slowly.
    echo tc qdisc add dev $SHAPEINTERFACE parent 1:20 htb default 21
    tc qdisc add dev $SHAPEINTERFACE parent 1:20 htb default 21

    #create the class for the users who have not registered. bad users!
    echo tc class add dev $SHAPEINTERFACE parent 1:10 classid 1:21 htb 
rate $UNREGISTEREDBW ceil $UNREGISTEREDBW burst 15k
    tc class add dev $SHAPEINTERFACE parent 1:10 classid 1:21 htb rate 
$UNREGISTEREDBW ceil $UNREGISTEREDBW burst 15k

    #add a queue to handle all the unregistered users
    echo tc qdisc add dev $SHAPEINTERFACE parent 1:21 handle 21: sfq 
perturb 10
    tc qdisc add dev $SHAPEINTERFACE parent 1:21 handle 21: sfq perturb 10

    #filters for each user will be added farther down...

}


addclass() {

IP=$1
CLASS=$2

#create the class for each user

echo tc class add dev $SHAPEINTERFACE parent 1:10 classid 1:$CLASS htb 
rate $BASEBANDWIDTH ceil $INTERBANDWIDTH burst 15k
tc class add dev $SHAPEINTERFACE parent 1:10 classid 1:$CLASS htb rate 
$BASEBANDWIDTH ceil $INTERBANDWIDTH burst 15k

#add a queue for each user
echo tc qdisc add dev $SHAPEINTERFACE parent 1:$CLASS handle $CLASS: sfq 
perturb 10
tc qdisc add dev $SHAPEINTERFACE parent 1:$CLASS handle $CLASS: sfq 
perturb 10

#add a filter for each user
echo tc filter add dev $SHAPEINTERFACE protocol ip parent 1:0 prio 1 u32 \
        match ip dst $IP flowid 1:$CLASS
tc filter add dev $SHAPEINTERFACE protocol ip parent 1:0 prio 1 u32 \
        match ip dst $IP flowid 1:$CLASS
echo tc filter add dev $SHAPEINTERFACE protocol ip parent 1:0 prio 1 u32 \
        match ip src $IP flowid 1:$CLASS
tc filter add dev $SHAPEINTERFACE protocol ip parent 1:0 prio 1 u32 \
     match ip src $IP flowid 1:$CLASS



}






OVERQUOTAIPS=()
NUMOVERQUOTA=0


initqos

FILE=/etc/hosts
echo $FILE
LINES=`cat $FILE | grep -v \# |grep -v 127.0.0.1 | wc -l`

#copy the ipfm file to the web dir
#echo The quota is currently $QUOTA -- compare to the third column of 
numbers > /var/www/html/curbandwidth.txt
echo The current test does not involve a quota. I may post bandwidth 
usage soon anyway. > /var/www/html/curbandwidth.txt
#cat $FILE >>/var/www/html/curbandwidth.txt

echo ips registered: $LINES

#loop through the ip addresses that have been observed so far
if [ $LINES -ne 0 ]; then
    for x in `seq 1 $LINES`; do
        HOSTNAME=`cat $FILE | grep -v \# | grep -v 127.0.0.1 | head -$x 
| tail -1 | cut -f 1 -d" "`
        addclass $HOSTNAME $(($x+21))
    done
else
    NUMOVERQUOTA=0
fi





_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-05-11 19:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-10  2:27 [LARTC] Fw: Traffic Shaping for 80 Users on Lan Osgaldo Suanzes
2003-05-11 19:29 ` Ethan Sommer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.