All of lore.kernel.org
 help / color / mirror / Atom feed
* [LARTC] Re: tc n00b
@ 2007-07-30 12:26 Abhijit Menon-Sen
  2007-07-30 13:16 ` Jonathan Gazeley
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Abhijit Menon-Sen @ 2007-07-30 12:26 UTC (permalink / raw)
  To: lartc

Hello Jonathan.

At 2007-07-30 12:40:00 +0100, jonathan.gazeley@bristol.ac.uk wrote:
>
> So far I have managed to get the download limits working. However I
> need to shape on both interfaces so I recycled the same code to apply
> to uploads but it didn't work and I can't figure out why

That's not really enough information to try to debug your problem, but I
can think of one problem you might encounter. Since you're doing NAT for
your clients, you should be aware that the source address is rewritten
(i.e. in nat/POSTROUTING) _before_ egress QoS processing.

So if you're trying to classify outgoing traffic based on their source
IP address, it won't work.

One alternative is to mark packets from the internal network (i.e. use
-J MARK --set-mark N in mangle/PREROUTING), and write a filter on the
outgoing interface that assigns traffic to classes based on how it's
marked (u32 match mark ...). (If you want more details, ask.)

(If anyone has other suggestions, I would be interested in them too.)

-- ams
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
@ 2007-07-30 13:16 ` Jonathan Gazeley
  2007-07-30 13:36 ` Jonathan Gazeley
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jonathan Gazeley @ 2007-07-30 13:16 UTC (permalink / raw)
  To: lartc

[-- Attachment #1: Type: text/plain, Size: 2219 bytes --]

Hi Abhijit,

Thanks a lot for your advice - I didn't realise that the source IP was 
re-written before the traffic was shaped.

I have attached the script I wrote. As I said before, the download limit 
does successfully work and each client (I am using 2 test clients) gets 
512kbit each. However the upload is still unlimited. But I don't believe 
this is currently due to the source IP being re-written - tc itself 
doesn't like my commands. They were literally copied and pasted from the 
download commands and altered as appropriate, as you see in the script. 
When I run this script, for each iteration of lines 48-49 produces the 
following error:

137.222.235.125
Error: Qdisc "tbf" is classless.
Error: Qdisc "1:" is classless.
Unknown filter "1:", hence option "protocol" is unparsable

I don't really understand that error - especially as the identical code 
does work for the download limits. If you can offer any more help, I'd 
be most grateful.

Cheers,
Jonathan


Abhijit Menon-Sen wrote:
> Hello Jonathan.
>
> At 2007-07-30 12:40:00 +0100, jonathan.gazeley@bristol.ac.uk wrote:
>   
>> So far I have managed to get the download limits working. However I
>> need to shape on both interfaces so I recycled the same code to apply
>> to uploads but it didn't work and I can't figure out why
>>     
>
> That's not really enough information to try to debug your problem, but I
> can think of one problem you might encounter. Since you're doing NAT for
> your clients, you should be aware that the source address is rewritten
> (i.e. in nat/POSTROUTING) _before_ egress QoS processing.
>
> So if you're trying to classify outgoing traffic based on their source
> IP address, it won't work.
>
> One alternative is to mark packets from the internal network (i.e. use
> -J MARK --set-mark N in mangle/PREROUTING), and write a filter on the
> outgoing interface that assigns traffic to classes based on how it's
> marked (u32 match mark ...). (If you want more details, ask.)
>
> (If anyone has other suggestions, I would be interested in them too.)
>
> -- ams
>   

-- 
------------------------
Jonathan Gazeley
Wireless & VPN Team
Information Systems & Computing
University of Bristol
------------------------


[-- Attachment #2: newtcscript.sh --]
[-- Type: text/plain, Size: 1618 bytes --]

#!/bin/sh
## JONATHAN'S TC SCRIPT

# LAN interfaces
LAN=eth0
WAN=eth1

# Maximum global uplink and downlink in mbit/s
GLOBAL_DOWN=100
GLOBAL_UP=100

# Maximum per-user download & upload speed in kbit/s
DOWNLINK=512
UPLINK=256

# Subnets to be stamped down upon, delimited by spaces
SUBNETS='235'

# IP range in each subnet
LOW_IP=1
HIGH_IP=125

#-----------------Don't mess with stuff below---------------|
#-----------------this line or you'll break it--------------|

# Flush existing rules
tc qdisc del dev $LAN root
tc qdisc del dev $WAN root

# Create root class for 100mbit interface - total traffic can't exceed this
tc qdisc add dev $LAN root handle 1: cbq avpkt 1000 bandwidth ${GLOBAL_DOWN}mbit
tc qdisc add dev $WAN root handle 1: cbq avpkt 1000 bandwidth ${GLOBAL_UP}mbit

# Set useful counters
jcount=1
icount=1
total=0

# Apply rules for all included subnets
for j in $SUBNETS
do
 for i in `seq $LOW_IP $HIGH_IP`
  do
   total=$((total+1))
   echo 137.222.$j.$i
   tc class add dev $LAN parent 1: classid 1:$total tbf rate ${DOWNLINK}kbit allot 1500 prio 5 bounded isolated 
   tc filter add dev $LAN parent 1: protocol ip prio 16 u32 match ip dst 137.222.$j.$i flowid 1:$total
   tc class add dev $wAN parent 1: classid 1:$total tbf rate ${UPLINK}kbit allot 1500 prio 5 bounded isolated
   tc filter add dev $wAN parent 1: protocol ip prio 16 u32 match ip src 137.222.$j.$i flowid 1:$total
   i=i+1
  done
j=j+1
done
echo
echo $total miscreants were stamped down upon. Good work Pokey!
echo Their IP addresses were in the following ranges:
for j in $SUBNETS
 do
  echo 137.222.$j.$LOW_IP-$HIGH_IP
 done

[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
  2007-07-30 13:16 ` Jonathan Gazeley
@ 2007-07-30 13:36 ` Jonathan Gazeley
  2007-07-30 13:38 ` Abhijit Menon-Sen
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jonathan Gazeley @ 2007-07-30 13:36 UTC (permalink / raw)
  To: lartc

Eck, how embarrassing. Thanks for that - now fixed. I still get errors 
though:

137.222.235.125
Error: Qdisc "tbf" is classless.
Error: Qdisc "tbf" is classless.

Any ideas what's broken? I'm not so hot on classful queueing disciplines!

Cheers,
Jonathan

------------------------

Jonathan Gazeley
Wireless & VPN Team
Information Systems & Computing
University of Bristol
------------------------


Abhijit Menon-Sen wrote:
> At 2007-07-30 14:16:22 +0100, jonathan.gazeley@bristol.ac.uk wrote:
>   
>> I don't really understand that error - especially as the identical
>> code does work for the download limits.
>>     
>
> I think it's only that you define $WAN and later use $wAN, so tc thinks
> it's missing an argument, and gets confused.
>
> -- ams
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
  2007-07-30 13:16 ` Jonathan Gazeley
  2007-07-30 13:36 ` Jonathan Gazeley
@ 2007-07-30 13:38 ` Abhijit Menon-Sen
  2007-07-30 13:55 ` Abhijit Menon-Sen
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Abhijit Menon-Sen @ 2007-07-30 13:38 UTC (permalink / raw)
  To: lartc

At 2007-07-30 14:16:22 +0100, jonathan.gazeley@bristol.ac.uk wrote:
>
> I don't really understand that error - especially as the identical
> code does work for the download limits.

I think it's only that you define $WAN and later use $wAN, so tc thinks
it's missing an argument, and gets confused.

-- ams
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (2 preceding siblings ...)
  2007-07-30 13:38 ` Abhijit Menon-Sen
@ 2007-07-30 13:55 ` Abhijit Menon-Sen
  2007-07-30 13:58 ` Jonathan Gazeley
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Abhijit Menon-Sen @ 2007-07-30 13:55 UTC (permalink / raw)
  To: lartc

At 2007-07-30 14:36:03 +0100, jonathan.gazeley@bristol.ac.uk wrote:
>
> 137.222.235.125
> Error: Qdisc "tbf" is classless.
> Error: Qdisc "tbf" is classless.

One of these is from the $LAN line, and one from the $WAN one, right?

> Any ideas what's broken? I'm not so hot on classful queueing
> disciplines!

It's not really clear to me what you want, but I'm guessing you want to
add a CBQ (not TBF) class, and then add a TBF qdisc (with tc qdisc add)
under that class. But I don't know why you would want to do that.

(I'd recommend using HTB instead of CBQ, and attaching a prio qdisc to
each HTB class.)

-- ams
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (3 preceding siblings ...)
  2007-07-30 13:55 ` Abhijit Menon-Sen
@ 2007-07-30 13:58 ` Jonathan Gazeley
  2007-07-30 14:10 ` Martin Milata
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jonathan Gazeley @ 2007-07-30 13:58 UTC (permalink / raw)
  To: lartc

As far as I'm concerned, it doesn't matter what I use, so long as I get 
the result - I just need to have each user alloted a certain upload and 
download speed. Nothing too fancy.

I tried switching to HTB. I amended my commands but I don't know if my 
kernel supports it. I've got CentOS 5.0 with kernel 2.6.18 but I now get 
errors like these:

137.222.235.125
RTNETLINK answers: No such file or directory
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
RTNETLINK answers: No such file or directory
RTNETLINK answers: Invalid argument
We have an error talking to the kernel

Any clues? (Sorry to ask so many favours, and thanks for your time)
Jonathan


Abhijit Menon-Sen wrote:
> At 2007-07-30 14:36:03 +0100, jonathan.gazeley@bristol.ac.uk wrote:
>   
>> 137.222.235.125
>> Error: Qdisc "tbf" is classless.
>> Error: Qdisc "tbf" is classless.
>>     
>
> One of these is from the $LAN line, and one from the $WAN one, right?
>
>   
>> Any ideas what's broken? I'm not so hot on classful queueing
>> disciplines!
>>     
>
> It's not really clear to me what you want, but I'm guessing you want to
> add a CBQ (not TBF) class, and then add a TBF qdisc (with tc qdisc add)
> under that class. But I don't know why you would want to do that.
>
> (I'd recommend using HTB instead of CBQ, and attaching a prio qdisc to
> each HTB class.)
>
> -- ams
>   

-- 
------------------------
Jonathan Gazeley
Wireless & VPN Team
Information Systems & Computing
University of Bristol
------------------------

_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (4 preceding siblings ...)
  2007-07-30 13:58 ` Jonathan Gazeley
@ 2007-07-30 14:10 ` Martin Milata
  2007-07-31  7:59 ` Nikolay Kichukov
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Martin Milata @ 2007-07-30 14:10 UTC (permalink / raw)
  To: lartc

On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
[...]
> 137.222.235.125
> RTNETLINK answers: No such file or directory
> RTNETLINK answers: Invalid argument
> We have an error talking to the kernel
> RTNETLINK answers: No such file or directory
> RTNETLINK answers: Invalid argument
> We have an error talking to the kernel
[...]

Hint: If you run your script as "bash -x script_name" (or use #!/bin/sh -x
as shabang), you will be able to see which exact command caused the error
message.

Regards,
-MM
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (5 preceding siblings ...)
  2007-07-30 14:10 ` Martin Milata
@ 2007-07-31  7:59 ` Nikolay Kichukov
  2007-07-31  9:37 ` Jonathan Gazeley
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Nikolay Kichukov @ 2007-07-31  7:59 UTC (permalink / raw)
  To: lartc

Hello,
You need to recompile your kernel and include the appropriate modules
for htb to work.

The other idea I have is to use policer to filter how much traffic PCs
in the LAN upload. This is done on the LAN interface. Eliminates the
need to mark packets, etc.

You just drop all the packets that are coming in too fast. And
presumably your LAN can do at least 100mbps, so the delay of packet
retransmission can be neglected.

HTH,
-Nikolay

Martin Milata wrote:
> On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
> [...]
>> 137.222.235.125
>> RTNETLINK answers: No such file or directory
>> RTNETLINK answers: Invalid argument
>> We have an error talking to the kernel
>> RTNETLINK answers: No such file or directory
>> RTNETLINK answers: Invalid argument
>> We have an error talking to the kernel
> [...]
> 
> Hint: If you run your script as "bash -x script_name" (or use #!/bin/sh -x
> as shabang), you will be able to see which exact command caused the error
> message.
> 
> Regards,
> -MM
> _______________________________________________
> LARTC mailing list
> LARTC@mailman.ds9a.nl
> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (6 preceding siblings ...)
  2007-07-31  7:59 ` Nikolay Kichukov
@ 2007-07-31  9:37 ` Jonathan Gazeley
  2007-07-31 10:00 ` Nikolay Kichukov
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jonathan Gazeley @ 2007-07-31  9:37 UTC (permalink / raw)
  To: lartc

Hi Nikolay,

Thanks for your help - this looks useful. Is it possible to apply a 
police filter invidiually to each IP behind the NAT?

Thanks,
Jonathan

Nikolay Kichukov wrote:
> Hello,
> You need to recompile your kernel and include the appropriate modules
> for htb to work.
>
> The other idea I have is to use policer to filter how much traffic PCs
> in the LAN upload. This is done on the LAN interface. Eliminates the
> need to mark packets, etc.
>
> You just drop all the packets that are coming in too fast. And
> presumably your LAN can do at least 100mbps, so the delay of packet
> retransmission can be neglected.
>
> HTH,
> -Nikolay
>
> Martin Milata wrote:
>   
>> On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
>> [...]
>>     
>>> 137.222.235.125
>>> RTNETLINK answers: No such file or directory
>>> RTNETLINK answers: Invalid argument
>>> We have an error talking to the kernel
>>> RTNETLINK answers: No such file or directory
>>> RTNETLINK answers: Invalid argument
>>> We have an error talking to the kernel
>>>       
>> [...]
>>
>> Hint: If you run your script as "bash -x script_name" (or use #!/bin/sh -x
>> as shabang), you will be able to see which exact command caused the error
>> message.
>>
>> Regards,
>> -MM
>> _______________________________________________
>> LARTC mailing list
>> LARTC@mailman.ds9a.nl
>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>     
> _______________________________________________
> LARTC mailing list
> LARTC@mailman.ds9a.nl
> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>   

-- 
------------------------
Jonathan Gazeley
Wireless & VPN Team
Information Systems & Computing
University of Bristol
------------------------

_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (7 preceding siblings ...)
  2007-07-31  9:37 ` Jonathan Gazeley
@ 2007-07-31 10:00 ` Nikolay Kichukov
  2007-07-31 10:08 ` Jonathan Gazeley
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Nikolay Kichukov @ 2007-07-31 10:00 UTC (permalink / raw)
  To: lartc

Hello Jonathan,
Indeed. I have tested with limited number of IPs though. Not sure how
that scheme will behave if you apply it to a huge network.

Cheers,
-Nikolay

Jonathan Gazeley wrote:
> Hi Nikolay,
> 
> Thanks for your help - this looks useful. Is it possible to apply a
> police filter invidiually to each IP behind the NAT?
> 
> Thanks,
> Jonathan
> 
> Nikolay Kichukov wrote:
>> Hello,
>> You need to recompile your kernel and include the appropriate modules
>> for htb to work.
>>
>> The other idea I have is to use policer to filter how much traffic PCs
>> in the LAN upload. This is done on the LAN interface. Eliminates the
>> need to mark packets, etc.
>>
>> You just drop all the packets that are coming in too fast. And
>> presumably your LAN can do at least 100mbps, so the delay of packet
>> retransmission can be neglected.
>>
>> HTH,
>> -Nikolay
>>
>> Martin Milata wrote:
>>  
>>> On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
>>> [...]
>>>    
>>>> 137.222.235.125
>>>> RTNETLINK answers: No such file or directory
>>>> RTNETLINK answers: Invalid argument
>>>> We have an error talking to the kernel
>>>> RTNETLINK answers: No such file or directory
>>>> RTNETLINK answers: Invalid argument
>>>> We have an error talking to the kernel
>>>>       
>>> [...]
>>>
>>> Hint: If you run your script as "bash -x script_name" (or use
>>> #!/bin/sh -x
>>> as shabang), you will be able to see which exact command caused the
>>> error
>>> message.
>>>
>>> Regards,
>>> -MM
>>> _______________________________________________
>>> LARTC mailing list
>>> LARTC@mailman.ds9a.nl
>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>     
>> _______________________________________________
>> LARTC mailing list
>> LARTC@mailman.ds9a.nl
>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>   
> 
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (8 preceding siblings ...)
  2007-07-31 10:00 ` Nikolay Kichukov
@ 2007-07-31 10:08 ` Jonathan Gazeley
  2007-07-31 11:24 ` Nikolay Kichukov
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jonathan Gazeley @ 2007-07-31 10:08 UTC (permalink / raw)
  To: lartc

Hi Nikolay,

How might this be implemented? I have used a shell script that loops 
around with a new IP address each time, and then my police line looks 
like this:

tc filter add dev $LAN parent 1: protocol ip prio 50 u32 match ip src 
137.222.$j.$i police rate ${UPLINK}kbit burst 10k drop flowid :1

However my clients still have unlimited uplink. The other day, someone 
told me that then the tc box is also NATing, the source IP is rewritten 
before the police filter is applied - meaning that you cannot match on 
source IP. How did you overcome this problem?

Thanks for your help,
Jonathan


Nikolay Kichukov wrote:
> Hello Jonathan,
> Indeed. I have tested with limited number of IPs though. Not sure how
> that scheme will behave if you apply it to a huge network.
>
> Cheers,
> -Nikolay
>
> Jonathan Gazeley wrote:
>   
>> Hi Nikolay,
>>
>> Thanks for your help - this looks useful. Is it possible to apply a
>> police filter invidiually to each IP behind the NAT?
>>
>> Thanks,
>> Jonathan
>>
>> Nikolay Kichukov wrote:
>>     
>>> Hello,
>>> You need to recompile your kernel and include the appropriate modules
>>> for htb to work.
>>>
>>> The other idea I have is to use policer to filter how much traffic PCs
>>> in the LAN upload. This is done on the LAN interface. Eliminates the
>>> need to mark packets, etc.
>>>
>>> You just drop all the packets that are coming in too fast. And
>>> presumably your LAN can do at least 100mbps, so the delay of packet
>>> retransmission can be neglected.
>>>
>>> HTH,
>>> -Nikolay
>>>
>>> Martin Milata wrote:
>>>  
>>>       
>>>> On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
>>>> [...]
>>>>    
>>>>         
>>>>> 137.222.235.125
>>>>> RTNETLINK answers: No such file or directory
>>>>> RTNETLINK answers: Invalid argument
>>>>> We have an error talking to the kernel
>>>>> RTNETLINK answers: No such file or directory
>>>>> RTNETLINK answers: Invalid argument
>>>>> We have an error talking to the kernel
>>>>>       
>>>>>           
>>>> [...]
>>>>
>>>> Hint: If you run your script as "bash -x script_name" (or use
>>>> #!/bin/sh -x
>>>> as shabang), you will be able to see which exact command caused the
>>>> error
>>>> message.
>>>>
>>>> Regards,
>>>> -MM
>>>> _______________________________________________
>>>> LARTC mailing list
>>>> LARTC@mailman.ds9a.nl
>>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>>     
>>>>         
>>> _______________________________________________
>>> LARTC mailing list
>>> LARTC@mailman.ds9a.nl
>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>   
>>>       

-- 
------------------------
Jonathan Gazeley
Wireless & VPN Team
Information Systems & Computing
University of Bristol
------------------------

_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (9 preceding siblings ...)
  2007-07-31 10:08 ` Jonathan Gazeley
@ 2007-07-31 11:24 ` Nikolay Kichukov
  2007-07-31 14:33 ` Nikolay Kichukov
  2007-08-03 15:11 ` Jonathan Gazeley
  12 siblings, 0 replies; 14+ messages in thread
From: Nikolay Kichukov @ 2007-07-31 11:24 UTC (permalink / raw)
  To: lartc

Hello,
The policer is not 1: but ffff:, not engress(root) but ingress.

Let me give you an example:

tc qdisc add dev eth0 ingress handle ffff:
TC_FILTER="tc filter add dev eth0 parent ffff: protocol ip"
$TC_FILTER prio 2 u32 match ip src 192.168.0.6/32 police rate 32kbit
burst 16kb drop flowid ffff:
$TC_FILTER prio 2 u32 match ip src 192.168.0.4/32 police rate 128kbit
burst 32kb drop flowid ffff:
$TC_FILTER prio 2 u32 match ip src 192.168.0.2/32 police rate 128kbit
burst 32kb drop flowid ffff:
$TC_FILTER prio 2 u32 match ip src 192.168.0.5/32 police rate 128kbit
burst 32kb drop flowid ffff:


eth0 is the LAN interface which the 192.168.0.0/24 IPs are connected to.

The rest is self explanatory.

Let me know if I can help you with anything else.

Cheers,
-Nik



Jonathan Gazeley wrote:
> Hi Nikolay,
> 
> How might this be implemented? I have used a shell script that loops
> around with a new IP address each time, and then my police line looks
> like this:
> 
> tc filter add dev $LAN parent 1: protocol ip prio 50 u32 match ip src
> 137.222.$j.$i police rate ${UPLINK}kbit burst 10k drop flowid :1
> 
> However my clients still have unlimited uplink. The other day, someone
> told me that then the tc box is also NATing, the source IP is rewritten
> before the police filter is applied - meaning that you cannot match on
> source IP. How did you overcome this problem?
> 
> Thanks for your help,
> Jonathan
> 
> 
> Nikolay Kichukov wrote:
>> Hello Jonathan,
>> Indeed. I have tested with limited number of IPs though. Not sure how
>> that scheme will behave if you apply it to a huge network.
>>
>> Cheers,
>> -Nikolay
>>
>> Jonathan Gazeley wrote:
>>  
>>> Hi Nikolay,
>>>
>>> Thanks for your help - this looks useful. Is it possible to apply a
>>> police filter invidiually to each IP behind the NAT?
>>>
>>> Thanks,
>>> Jonathan
>>>
>>> Nikolay Kichukov wrote:
>>>    
>>>> Hello,
>>>> You need to recompile your kernel and include the appropriate modules
>>>> for htb to work.
>>>>
>>>> The other idea I have is to use policer to filter how much traffic PCs
>>>> in the LAN upload. This is done on the LAN interface. Eliminates the
>>>> need to mark packets, etc.
>>>>
>>>> You just drop all the packets that are coming in too fast. And
>>>> presumably your LAN can do at least 100mbps, so the delay of packet
>>>> retransmission can be neglected.
>>>>
>>>> HTH,
>>>> -Nikolay
>>>>
>>>> Martin Milata wrote:
>>>>  
>>>>      
>>>>> On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
>>>>> [...]
>>>>>           
>>>>>> 137.222.235.125
>>>>>> RTNETLINK answers: No such file or directory
>>>>>> RTNETLINK answers: Invalid argument
>>>>>> We have an error talking to the kernel
>>>>>> RTNETLINK answers: No such file or directory
>>>>>> RTNETLINK answers: Invalid argument
>>>>>> We have an error talking to the kernel
>>>>>>                 
>>>>> [...]
>>>>>
>>>>> Hint: If you run your script as "bash -x script_name" (or use
>>>>> #!/bin/sh -x
>>>>> as shabang), you will be able to see which exact command caused the
>>>>> error
>>>>> message.
>>>>>
>>>>> Regards,
>>>>> -MM
>>>>> _______________________________________________
>>>>> LARTC mailing list
>>>>> LARTC@mailman.ds9a.nl
>>>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>>>             
>>>> _______________________________________________
>>>> LARTC mailing list
>>>> LARTC@mailman.ds9a.nl
>>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>>         
> 
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* Re: [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (10 preceding siblings ...)
  2007-07-31 11:24 ` Nikolay Kichukov
@ 2007-07-31 14:33 ` Nikolay Kichukov
  2007-08-03 15:11 ` Jonathan Gazeley
  12 siblings, 0 replies; 14+ messages in thread
From: Nikolay Kichukov @ 2007-07-31 14:33 UTC (permalink / raw)
  To: lartc

Hello Jonathan,
The scenario works perfectly well on a NAT router. See, you drop excess
of bits on the interface where the packets arrive. Which is before
nating. Maybe we speak about different scenarios here?

What I describe limits the maximum upload speed for ip in the LAN.

Let me know the packet flow with the interfaces and IP addresses.

Cheers,
-Nikolay


p.s. I am also CCing the lartc mailing list in case someone else can help.


Jonathan Gazeley wrote:
> Hi Nikolay,
> 
> Thanks for this. I tried using the code below, but it did not work for
> me. Is your server running tc also a NAT box? The reason I think my code
> isn't working is because NAT and tc are on the same server, meaning that
> the source IP of an outgoing packet is rewritten _before_ it gets to tc
> -- meaning that it is not possible to match packets by source IP.
> 
> Cheers,
> Jonathan
> 
> Nikolay Kichukov wrote:
>> Hello,
>> The policer is not 1: but ffff:, not engress(root) but ingress.
>>
>> Let me give you an example:
>>
>> tc qdisc add dev eth0 ingress handle ffff:
>> TC_FILTER="tc filter add dev eth0 parent ffff: protocol ip"
>> $TC_FILTER prio 2 u32 match ip src 192.168.0.6/32 police rate 32kbit
>> burst 16kb drop flowid ffff:
>> $TC_FILTER prio 2 u32 match ip src 192.168.0.4/32 police rate 128kbit
>> burst 32kb drop flowid ffff:
>> $TC_FILTER prio 2 u32 match ip src 192.168.0.2/32 police rate 128kbit
>> burst 32kb drop flowid ffff:
>> $TC_FILTER prio 2 u32 match ip src 192.168.0.5/32 police rate 128kbit
>> burst 32kb drop flowid ffff:
>>
>>
>> eth0 is the LAN interface which the 192.168.0.0/24 IPs are connected to.
>>
>> The rest is self explanatory.
>>
>> Let me know if I can help you with anything else.
>>
>> Cheers,
>> -Nik
>>
>>
>>
>> Jonathan Gazeley wrote:
>>  
>>> Hi Nikolay,
>>>
>>> How might this be implemented? I have used a shell script that loops
>>> around with a new IP address each time, and then my police line looks
>>> like this:
>>>
>>> tc filter add dev $LAN parent 1: protocol ip prio 50 u32 match ip src
>>> 137.222.$j.$i police rate ${UPLINK}kbit burst 10k drop flowid :1
>>>
>>> However my clients still have unlimited uplink. The other day, someone
>>> told me that then the tc box is also NATing, the source IP is rewritten
>>> before the police filter is applied - meaning that you cannot match on
>>> source IP. How did you overcome this problem?
>>>
>>> Thanks for your help,
>>> Jonathan
>>>
>>>
>>> Nikolay Kichukov wrote:
>>>    
>>>> Hello Jonathan,
>>>> Indeed. I have tested with limited number of IPs though. Not sure how
>>>> that scheme will behave if you apply it to a huge network.
>>>>
>>>> Cheers,
>>>> -Nikolay
>>>>
>>>> Jonathan Gazeley wrote:
>>>>  
>>>>      
>>>>> Hi Nikolay,
>>>>>
>>>>> Thanks for your help - this looks useful. Is it possible to apply a
>>>>> police filter invidiually to each IP behind the NAT?
>>>>>
>>>>> Thanks,
>>>>> Jonathan
>>>>>
>>>>> Nikolay Kichukov wrote:
>>>>>           
>>>>>> Hello,
>>>>>> You need to recompile your kernel and include the appropriate modules
>>>>>> for htb to work.
>>>>>>
>>>>>> The other idea I have is to use policer to filter how much traffic
>>>>>> PCs
>>>>>> in the LAN upload. This is done on the LAN interface. Eliminates the
>>>>>> need to mark packets, etc.
>>>>>>
>>>>>> You just drop all the packets that are coming in too fast. And
>>>>>> presumably your LAN can do at least 100mbps, so the delay of packet
>>>>>> retransmission can be neglected.
>>>>>>
>>>>>> HTH,
>>>>>> -Nikolay
>>>>>>
>>>>>> Martin Milata wrote:
>>>>>>  
>>>>>>               
>>>>>>> On Mon, Jul 30, 2007 at 02:58:00PM +0100, Jonathan Gazeley wrote:
>>>>>>> [...]
>>>>>>>                      
>>>>>>>> 137.222.235.125
>>>>>>>> RTNETLINK answers: No such file or directory
>>>>>>>> RTNETLINK answers: Invalid argument
>>>>>>>> We have an error talking to the kernel
>>>>>>>> RTNETLINK answers: No such file or directory
>>>>>>>> RTNETLINK answers: Invalid argument
>>>>>>>> We have an error talking to the kernel
>>>>>>>>                               
>>>>>>> [...]
>>>>>>>
>>>>>>> Hint: If you run your script as "bash -x script_name" (or use
>>>>>>> #!/bin/sh -x
>>>>>>> as shabang), you will be able to see which exact command caused the
>>>>>>> error
>>>>>>> message.
>>>>>>>
>>>>>>> Regards,
>>>>>>> -MM
>>>>>>> _______________________________________________
>>>>>>> LARTC mailing list
>>>>>>> LARTC@mailman.ds9a.nl
>>>>>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>>>>>                         
>>>>>> _______________________________________________
>>>>>> LARTC mailing list
>>>>>> LARTC@mailman.ds9a.nl
>>>>>> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>>>>>>                   
> 
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

* [LARTC] Re: tc n00b
  2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
                   ` (11 preceding siblings ...)
  2007-07-31 14:33 ` Nikolay Kichukov
@ 2007-08-03 15:11 ` Jonathan Gazeley
  12 siblings, 0 replies; 14+ messages in thread
From: Jonathan Gazeley @ 2007-08-03 15:11 UTC (permalink / raw)
  To: lartc

Hi Nikolay,

Thanks very much for your help - the script is now working. The downlink 
shaping works as expected, but the uplink shaping seems to give 4 times 
more bandwidth than it ought to - so I've just divided the number by 4 
and it is satisfactory.

However, I've now discovered that pings from one of my shaped NAT 
clients, to another LAN machine that usually take <1ms, now take ~3500ms 
when I am using the bandwidth. How can I avoid these enormous queues?

I have cc'd the list in case anyone else has an idea. Have a good 
weekend everyone!

Cheers,
Jonathan

------------------------
Jonathan Gazeley
Wireless & VPN Team
Information Systems & Computing
University of Bristol
------------------------



Nikolay Kichukov wrote:
> Hey,
> sorry for delay. I had some issues with my primary
> internet connection and had to change the primary mail
> host as well.
>
> I looked at the script.
>
> Looks totally fine to me.
>
> If you are not sure where exactly the problem lies,
> try adding ONLY the ingress rules. Test it, see if it
> works. Then tweak if needed the script you sent to me.
>
> tc qdisc add dev $LAN ingress handle ffff:
> tc filter add dev eth0 parent ffff: protocol ip prio 2
> u32 match ip src IPHERE police rate ${UPLINK}kbit
> burst 16kb drop flowid ffff:
>
> Cheers,
> -Nik
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

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

end of thread, other threads:[~2007-08-03 15:11 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-30 12:26 [LARTC] Re: tc n00b Abhijit Menon-Sen
2007-07-30 13:16 ` Jonathan Gazeley
2007-07-30 13:36 ` Jonathan Gazeley
2007-07-30 13:38 ` Abhijit Menon-Sen
2007-07-30 13:55 ` Abhijit Menon-Sen
2007-07-30 13:58 ` Jonathan Gazeley
2007-07-30 14:10 ` Martin Milata
2007-07-31  7:59 ` Nikolay Kichukov
2007-07-31  9:37 ` Jonathan Gazeley
2007-07-31 10:00 ` Nikolay Kichukov
2007-07-31 10:08 ` Jonathan Gazeley
2007-07-31 11:24 ` Nikolay Kichukov
2007-07-31 14:33 ` Nikolay Kichukov
2007-08-03 15:11 ` Jonathan Gazeley

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.