[LARTC] RE: tcng and network processor

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Chris,
Did find and read docs in tcng/doc ?

We are using tcng external interface to translate something like this:

==================================================================
/*
 * diffserv.tc
 *
 * Written 2002 by Jacob Teplitsky
 * Copyright 2002 Bivio Networks
 */

/*
 * Classification:
 *  - static classification by DSCP
 *
 * Queuing:
 *  - traffic selected by static classification:
 *    EF:
 *	policed by SLB, and transmitted unshaped.
 *    AF:
 *    - nr_wfq
 *    - GRED for each AF level
 *    - DSMARK implementing marking (AF33 -> AF32 and AF43 -> AF42)
 *  - other traffic:
 *    -	RED
 */


$ef_rate = 25 Mbps;
$af_rate = 100 Mbps;


dev "s0e0" {
    egress {
	/* Expedited Forwarding, RFC2598 */
	$ef_pol = SLB(cir $ef_rate,cbs 100 kB);
	class (<$ef>) if ip_dscp == 0b101110 && SLB_else_drop($ef_pol);

	/* Assured Forwarding, RFC2597 */
	class (<$af11>) if ip_dscp == 0b001010;
	class (<$af12>) if ip_dscp == 0b001100;
	class (<$af13>) if ip_dscp == 0b001110;
	class (<$af21>) if ip_dscp == 0b010010;
	class (<$af22>) if ip_dscp == 0b010100;
	class (<$af23>) if ip_dscp == 0b010110;
	class (<$af31>) if ip_dscp == 0b011010;
	class (<$af32>) if ip_dscp == 0b011100;
	class (<$af33>,set_dscp(0b011100))
			if ip_dscp == 0b011110;
	class (<$af41>) if ip_dscp == 0b100010;
	class (<$af42>) if ip_dscp == 0b100100;
	class (<$af43>,set_dscp(0b100100))
			if ip_dscp == 0b100110;

	/* Best Effort */
	class (<$be>) if 1;

	nr_cbr {
	    $ef = class (rate 2 Gbps, bounded,prio 1) {
		fifo;
	    }
	    class (rate $af_rate,bounded,prio 1) {
		nr_wfq {
		    nr_wfq_class(weight 2) {
			nr_gred (min 6kB,max 18kB,limit 20kB) {
			    $af11 = class (probability 0.1);
			    $af12 = class (probability 0.2);
			    $af13 = class (probability 0.4,default);
			}
		    }	
		    nr_wfq_class(weight 1) {
			nr_gred (min 8kB,max 24kB,limit 50kB) {
			    $af21 = class (probability 0.1);
			    $af22 = class (probability 0.2);
			    $af23 = class (probability 0.4,default);
			}
		    }
		    nr_wfq_class(weight 3) {
			nr_gred (min 8kB,max 24kB,limit 100kB) {
			    $af31 = class (probability 0.1);
			    $af32 = class (probability 0.2);
			    $af33 = class (probability 0.4,default);
			}
		    }
		    nr_wfq_class(weight 1) {
			nr_gred (min 8kB,max 24kB,limit 100kB) {
			    $af41 = class (probability 0.1);
			    $af42 = class (probability 0.2);
			    $af43 = class (probability 0.4,default);
			}
		    }
		}
	    }
	    $be = class (rate 100MBps,prio 2) { /* rate is ignored */
		fifo;
	    }
	}
    }
}
=========================================================================
               to:
=======================================================================
# b300
bucket 1 = 3125000 0 102400 102400 0
block s0e0 egress
qdisc 3 = fifo
qdisc 5 = gred bandwidth 0 default 2
class 0 = avpkt 1 burst 0 limit 20480 max 18432 min 6144 probability 100000
class 1 = avpkt 1 burst 0 limit 20480 max 18432 min 6144 probability 200000
class 2 = avpkt 1 burst 0 limit 20480 max 18432 min 6144 probability 400000
qdisc 6 = gred bandwidth 0 default 2
class 0 = avpkt 1 burst 0 limit 51200 max 24576 min 8192 probability 100000
class 1 = avpkt 1 burst 0 limit 51200 max 24576 min 8192 probability 200000
class 2 = avpkt 1 burst 0 limit 51200 max 24576 min 8192 probability 400000
qdisc 7 = gred bandwidth 0 default 2
class 0 = avpkt 1 burst 0 limit 102400 max 24576 min 8192 probability 100000
class 1 = avpkt 1 burst 0 limit 102400 max 24576 min 8192 probability 200000
class 2 = avpkt 1 burst 0 limit 102400 max 24576 min 8192 probability 400000
qdisc 8 = gred bandwidth 0 default 2
class 0 = avpkt 1 burst 0 limit 102400 max 24576 min 8192 probability 100000
class 1 = avpkt 1 burst 0 limit 102400 max 24576 min 8192 probability 200000
class 2 = avpkt 1 burst 0 limit 102400 max 24576 min 8192 probability 400000
qdisc 4 = prio bands 4
class 1 = qdisc 5 pragma weight=2.000000
class 2 = qdisc 6 pragma weight=1.000000
class 3 = qdisc 7 pragma weight=3.000000
class 4 = qdisc 8 pragma weight=1.000000
qdisc 9 = fifo
qdisc 2 = cbq
class 0 = allot 1 avpkt 1 bandwidth 2147483647 maxburst 1 rate 2147483647
class 1 = allot 1 avpkt 1 bandwidth 2147483647 bounded 1 maxburst 1 parent 0 prio 1 qdisc 3 rate 250000000
class 2 = allot 1 avpkt 1 bandwidth 2147483647 bounded 1 maxburst 1 parent 0 prio 1 qdisc 4 rate 12500000
class 3 = allot 1 avpkt 1 bandwidth 2147483647 maxburst 1 parent 0 prio 2 qdisc 9 rate 100000000
qdisc 1 = dsmark indices 512
class 0 = qdisc 2
class 128 =
class 272 =
class 273 =
class 274 =
class 288 =
class 289 =
class 290 =
class 304 =
class 305 =
class 306 = mask 3 value 112
class 320 =
class 321 =
class 322 = mask 3 value 144
class 384 =
action 128 = class 1:384,2:3
action 66 = class 1:322,2:2,4:4,8:2
action 65 = class 1:321,2:2,4:4,8:1
action 64 = class 1:320,2:2,4:4,8:0
action 50 = class 1:306,2:2,4:3,7:2
action 49 = class 1:305,2:2,4:3,7:1
action 48 = class 1:304,2:2,4:3,7:0
action 34 = class 1:290,2:2,4:2,6:2
action 33 = class 1:289,2:2,4:2,6:1
action 32 = class 1:288,2:2,4:2,6:0
action 18 = class 1:274,2:2,4:1,5:2
action 17 = class 1:273,2:2,4:1,5:1
action 16 = class 1:272,2:2,4:1,5:0
action 0 = drop
action 1 = class 1:128,2:1
action 2 = count 1 action 1
action 3 = conform 1 action 2 action 0
match 0:152:6=0x2E action 3
match 0:152:6=0x0A action 16
match 0:152:6=0x0C action 17
match 0:152:6=0x0E action 18
match 0:152:6=0x12 action 32
match 0:152:6=0x14 action 33
match 0:152:6=0x16 action 34
match 0:152:6=0x1A action 48
match 0:152:6=0x1C action 49
match 0:152:6=0x1E action 50
match 0:152:6=0x22 action 64
match 0:152:6=0x24 action 65
match 0:152:6=0x26 action 66
match action 128
# END
=====================================================================

Then we use set of  routines:
tcng/lib/tcng/include/tccext.h to parse the tccext output
and download the config into  our NP.
However, we are not using Intel IXP1200 NP


Thanks
- Jacob
> From: "Chris Clark" <cclark@ece.gatech.edu>
> Subject: RE: [LARTC] tcng and network processor
> 
> I see that Bivio uses a network processor with TCNG, but I can't find
> any more details... There are no whitepapers on the website.
> 
> Werner (or anyone else at Bivio), are you able to provide any details?
> 
> 
> -----Original Message-----
> 
> I am considering a project to translate tcc output (C code or external
> interface) to network processor code, so that the NP can do the actual
> traffic shaping. I have a platform using the Intel IXP1200 NP on a PCI
> card, which functions as a NIC for the host PC running Linux. This
> approach would reduce the processing load on the host.
> 
> Has anyone attempted anything like this? 
> 
> I have never used tcng before, but I have been reading all of the
> available documentation. Is there anything that I should know about tcc
> or its output before I attempt this?
> 
> Thanks,
> Chris
> 


[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux