Re: [mpls-linux-general] Problems with MPLS 128, kernel crash
Status: Beta
Brought to you by:
jleu
From: James R. L. <jl...@mi...> - 2002-04-06 22:31:51
|
*sigh* I have seen this before. I must be doing something wrong with the way I handle skbs. I haven't been able to figure out what, but I must be doing something wrong. Jim BTW ... impressive instructions :-) On Tue, Apr 02, 2002 at 04:09:06PM +0200, pim...@in... wrote: > Hi James, > > I am able to crash the kernel (2.4.17+MPLS128+(ftos&dscp) patches from > iptables-1.2.6a) if debugging is off. > > Attached is the script that sets up the DS tree. > > cat /proc/net/mpls* (only relevant bits) > 0x00000003 0/0/0 2 SET_EXP(01) EXP2TC( EXP(0)->TC(ffff) EXP(1)->TC(00b8) > EXP(2)->TC(0028) EXP(3)->TC(0030) EXP(4)->TC(0048) EXP(5)->TC(0050) > EXP(6)->TC(0068) EXP(7)->TC(0070) ) PUSH(gen 21650) SET(eth2,10.0.4.1) > T21650/1 0x00000003 > > traffic is mapped on T21650/1 via iptables (default gateway on table 2) > > ping -f 10.0.2.2 > .... (couple packets are sent) > *crash* > > [console] > length:4 > warning: kfree pased on skb still on list from 0xc01f9e18 > kernel BUG: at skbuff.c:321 > ... > kernel panic: Aiee killing the interrupt handler... > > I want to stress the fact that I am only able to reproduce it when > debugging is off. > Let me know if you need additional information/want me to test > something. > > Pim. > > -- > Pim Van Heuven Ghent University - IMEC > Department of Information Technology (INTEC) > Sint-Pietersnieuwstraat, 41 B-9000, Gent, Belgium > pim...@in... > DiffServ/MPLS(RSVP-TE) for Linux: > http://dsmpls.atlantis.rug.ac.be > #!/bin/bash > # This script will set-up an example DS tree > > IFACES="eth1 eth2 eth3" > TC=/usr/local/bin/tc > > if test $# -gt 0 > then > case $1 in > s|-s) > if test $# -gt 1 > then > $TC -s qdisc ls dev $2 > else > for i in $IFACES; do echo "***"$i"***" > $TC -s qdisc ls dev eth2; done > fi;; > d|-d) > if test $# -gt 1 > then > $TC qdisc del root dev $2 > $TC filter del root dev $2 > $TC class del root dev $2 > else > for i in $IFACES; do > $TC qdisc del root dev $i > $TC filter del root dev $i > $TC class del root dev $i > done > fi;; > h|-h|--help|-help) > echo $0 > echo " -s show statistics" > echo " -d delete filters and qdiscs" > echo " install qdiscs and filers" > esac > exit > else > > #iptables -A OUTPUT -t mangle -p rsvp -o eth0 -j DROP > > for i in $IFACES; do > > echo Configuring interface $i > > echo DSMARK on $i > $TC qdisc add dev $i root handle 1:0 dsmark indices 64 default_index 0 #tcindex classid 2.2 #set_tc_index > > echo Main Filter on $i > $TC filter add dev $i parent 1:0 protocol mpls tcindex mask 0xfc shift 2 > echo prio > > ##### Set up of the proper qdisc on $i > > # First a DSMARK qdisc is introduced in order to retrieve TOS from IP header > #$TC qdisc add dev $i handle 1:0 root dsmark indices 64 #set_tc_index > $TC filter add dev $i parent 1:0 protocol mpls prio 1 tcindex mask 0xfc shift 2 pass_on > > # Second a CBQ qdisc is used in order to support EF, AF and BE classes > $TC qdisc add dev $i parent 1:0 handle 2:0 cbq bandwidth 100Mbit cell 8 avpkt 1000 mpu 64 > $TC filter add dev $i parent 2:0 protocol mpls prio 1 tcindex mask 0xf0 shift 4 pass_on > > ## Definition of the CBQ leaf classes to support AF, EF and BE > echo AF1 > ## AF Class 1 specific setup > $TC class add dev $i parent 2:0 classid 2:1 cbq bandwidth 100Mbit rate 15Mbit \ > avpkt 1000 prio 5 allot 1514 weight 1.5Mbit maxburst 21 defmap 0 borrow > $TC filter add dev $i parent 2:0 protocol mpls prio 1 handle 1 tcindex classid 2:1 > $TC qdisc add dev $i parent 2:1 gred setup DPs 3 default 2 grio > # --- AF Class 1 DP 1--- > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x0a tcindex classid 1:111 > $TC qdisc change dev $i parent 2:1 gred limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit DP 1 probability 0.02 prio 2 > # --- AF Class 1 DP 2--- > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x0c tcindex classid 1:112 > $TC qdisc change dev $i parent 2:1 gred limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit DP 2 probability 0.04 prio 3 > > ## AF Class 2 specific setup > echo AF2 > $TC class add dev $i parent 2:0 classid 2:2 cbq bandwidth 100Mbit rate 15Mbit \ > avpkt 1000 prio 4 allot 1514 weight 1.5Mbit maxburst 21 defmap 0 borrow > $TC filter add dev $i parent 2:0 protocol mpls prio 1 handle 2 tcindex classid 2:2 > $TC qdisc add dev $i parent 2:2 gred setup DPs 3 default 2 grio > # --- AF Class 2 DP 1--- > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x12 tcindex classid 1:121 > $TC qdisc change dev $i parent 2:2 gred limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit DP 1 probability 0.02 prio 2 > # --- AF Class 2 DP 2--- > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x14 tcindex classid 1:122 > $TC qdisc change dev $i parent 2:2 gred limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit DP 2 probability 0.04 prio 3 > > ## AF Class 3 specific setup > echo AF3 > $TC class add dev $i parent 2:0 classid 2:3 cbq bandwidth 100Mbit rate 15Mbit \ > avpkt 1000 prio 3 allot 1514 weight 1.5Mbit maxburst 21 defmap 0 borrow > $TC filter add dev $i parent 2:0 protocol mpls prio 1 handle 3 tcindex classid 2:3 > $TC qdisc add dev $i parent 2:3 gred setup DPs 3 default 2 grio > # --- AF Class 3 DP 1--- > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x1a tcindex classid 1:131 > $TC qdisc change dev $i parent 2:3 gred limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit DP 1 probability 0.02 prio 2 > # --- AF Class 3 DP 2--- > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x1c tcindex classid 1:132 > $TC qdisc change dev $i parent 2:3 gred limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit DP 2 probability 0.04 prio 3 > > ## EF class specific setup > echo EF > $TC class add dev $i parent 2:0 classid 2:5 cbq bandwidth 100Mbit rate 10Mbit \ > avpkt 1000 prio 1 bounded allot 1514 weight 1Mbit maxburst 10 defmap 0 > $TC qdisc add dev $i parent 2:5 pfifo limit 10 > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x2e tcindex classid 1:151 > $TC filter add dev $i parent 2:0 protocol mpls prio 1 handle 5 tcindex classid 2:5 > > ## BE class specific setup > echo BE > $TC class add dev $i parent 2:0 classid 2:6 cbq bandwidth 100Mbit rate 30Mbit \ > avpkt 1000 prio 7 allot 1514 weight 3Mbit maxburst 21 borrow > $TC qdisc add dev $i parent 2:6 red limit 600KB min 150KB max 450KB burst 200 \ > avpkt 1000 bandwidth 100Mbit probability 0.4 > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x0 tcindex classid 1:161 > $TC filter add dev $i parent 2:0 protocol mpls prio 1 handle 6 tcindex classid 2:6 > > ## OSPF - RSVP Pipe class specific setup > echo OSPF \& RSVP filter > $TC class add dev $i parent 2:0 classid 2:7 cbq bandwidth 100Mbit rate 1Mbit \ > avpkt 1000 prio 1 bounded allot 1514 weight 1Mbit maxburst 10 defmap 0 > $TC qdisc add dev $i parent 2:5 pfifo limit 10 > $TC filter add dev $i parent 1:0 protocol mpls prio 1 handle 0x30 tcindex classid 1:171 > $TC filter add dev $i parent 2:0 protocol mpls prio 1 handle 7 tcindex classid 2:7 > > done > > fi > > > > > -- James R. Leu |