# class selection path: 2+1 case (now allowed) --------------------------------
tcsim -v | sed '/.*eth0 /s///p;d' | sed 's/protocol all //'
dev eth0 {
    dsmark {
	class (<$x>,value 1) if raw[0] == 1;
	class (<$x>,value 2) if 1;
	prio {
	    $x = class {}
	}
    }
}
EOF
handle 1:0 root dsmark indices 4
handle 2:0 parent 1:0 prio
parent 2:0 prio 1 tcindex mask 0x1 shift 0
parent 2:0 prio 1 handle 1 tcindex classid 2:1
classid 1:1 dsmark value 0x1
classid 1:3 dsmark value 0x2
parent 1:0 prio 1 u32 match u8 0x1 0xff at 0 classid 1:1
parent 1:0 prio 1 u32 match u32 0x0 0x0 at 0 classid 1:3
# class selection path: 3+2 case (now allowed) --------------------------------
tcsim -v | sed '/.*eth0 /s///p;d' | sed 's/protocol all //'
dev eth0 {
    dsmark (mask 0) {
	class (<$x>,value 0x10) if raw[0] == 1;
	class (<$x>,value 0x20) if raw[0] == 2;
	class (<$x>,value 0x30) if raw[0] == 3;
	class (<$y>,value 0) if 1;
	prio {
	    $x = class {} /* () and {} are almost equivalent here */
	    $y = class ();
	}
    }
}
EOF
handle 1:0 root dsmark indices 16
classid 1:0 dsmark mask 0x0
handle 2:0 parent 1:0 prio
parent 2:0 prio 1 tcindex mask 0x3 shift 0
parent 2:0 prio 1 handle 2 tcindex classid 2:2
parent 2:0 prio 1 handle 1 tcindex classid 2:1
classid 1:1 dsmark mask 0x0 value 0x10
classid 1:2 dsmark mask 0x0 value 0x0
classid 1:5 dsmark mask 0x0 value 0x20
classid 1:9 dsmark mask 0x0 value 0x30
parent 1:0 prio 1 u32 match u8 0x1 0xff at 0 classid 1:1
parent 1:0 prio 1 u32 match u8 0x2 0xff at 0 classid 1:5
parent 1:0 prio 1 u32 match u8 0x3 0xff at 0 classid 1:9
parent 1:0 prio 1 u32 match u32 0x0 0x0 at 0 classid 1:2
# class selection path: multiple paths and large number of bits (ext) ---------
tcc -xif:err -Xx,all 2>&1 | grep -v '^#'
dsmark {
  class (<$x>,value 10) if raw[0] == 1;
  class (<$x>,value 20) if raw[0] == 2;
  class (<$x>,value 30) if raw[0] == 3;
  class (<$x>,value 40) if 1;
  prio (1) {
    prio (2) {
      prio (3) {
        prio (4) {
          prio (5) {
            prio (6) {
              prio (7) {
                prio (8) {
                  prio (9) {
                    prio (10) {
                      prio (11) {
                        prio (12) {
                          prio (13) {
                            prio (14) {
                              $x = class {}
} } } } } } } } } } } } } } }
EOF
<stdin>:6: warning: number of index bits required for path exceeds 15
block eth0 egress
qdisc 14 = prio bands 3
class 1 =
qdisc 13 = prio bands 3
class 1 = qdisc 14
qdisc 12 = prio bands 3
class 1 = qdisc 13
qdisc 11 = prio bands 3
class 1 = qdisc 12
qdisc 10 = prio bands 3
class 1 = qdisc 11
qdisc 9 = prio bands 3
class 1 = qdisc 10
qdisc 8 = prio bands 3
class 1 = qdisc 9
qdisc 7 = prio bands 3
class 1 = qdisc 8
qdisc 6 = prio bands 3
class 1 = qdisc 7
qdisc 5 = prio bands 3
class 1 = qdisc 6
qdisc 4 = prio bands 3
class 1 = qdisc 5
qdisc 3 = prio bands 3
class 1 = qdisc 4
qdisc 2 = prio bands 3
class 1 = qdisc 3
qdisc 1 = prio bands 3
class 1 = qdisc 2
qdisc 15 = dsmark indices 8
class 0 = qdisc 1
class 1 = value 40
class 2 = value 30
class 3 = value 20
class 4 = value 10
action 1 = class 15:1,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,12:1,13:1,14:1
action 2 = class 15:2,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,12:1,13:1,14:1
action 3 = class 15:3,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,12:1,13:1,14:1
action 4 = class 15:4,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,12:1,13:1,14:1
match 0:0:8=0x01 action 4
match 0:0:8=0x02 action 3
match 0:0:8=0x03 action 2
match action 1
