# tcsim resets tc_index when traversing a link --------------------------------
tcsim | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 100Mbps {
	dsmark (mask 0) {
	    tcindex {
		class (1,value 1) on element(0);
		class (2,value 2) on element(1);
	    }
	}
    }
    route default c
}
connect a b

#define NOTHING

send a tc_index=0 IP_PCK(NOTHING)
send a tc_index=1 IP_PCK(NOTHING)
end
EOF
0.000002 D:01 20 0x00000012
0.000003 D:01 20 0x00000013
# tcsim resets tc_index to global default when traversing a link --------------
tcsim | tcsim_filter -d dev=c tos
#include "packet.def"

attribute default tc_index=1

dev a 100Mbps
host {
    dev b
    dev c 100Mbps {
	dsmark (mask 0) {
	    tcindex {
		class (1,value 1) on element(0);
		class (2,value 2) on element(1);
	    }
	}
    }
    route default c
}
connect a b

#define NOTHING

send a tc_index=0 IP_PCK(NOTHING)
send a tc_index=1 IP_PCK(NOTHING)
end
EOF
0.000002 D:02 20 0x00000012
0.000003 D:02 20 0x00000013
# tcsim -p preserves tc_index -------------------------------------------------
tcsim -p | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 100Mbps {
	dsmark (mask 0) {
	    tcindex {
		class (1,value 1) on element(0);
		class (2,value 2) on element(1);
	    }
	}
    }
    route default c
}
connect a b

#define NOTHING

send a tc_index=0 IP_PCK(NOTHING)
send a tc_index=1 IP_PCK(NOTHING)
end
EOF
0.000002 D:01 20 0x00000012
0.000003 D:02 20 0x00000013
# tcsim resets nfmark when traversing a link ----------------------------------
tcsim | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 100Mbps {
	dsmark (mask 0,default_index 3) {
	    fw {
		class (1,value 1) on element(1);
		class (2,value 2) on element(2);
	    }
	    class (3,value 3);
	}
    }
    route default c
}
connect a b

#define NOTHING

send a nfmark=1 IP_PCK(NOTHING)
send a nfmark=2 IP_PCK(NOTHING)
end
EOF
0.000002 D:03 20 0x00000015
0.000003 D:03 20 0x00000016
# tcsim -p preserves nfmark ---------------------------------------------------
tcsim -p | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 100Mbps {
	dsmark (mask 0,default_index 3) {
	    fw {
		class (1,value 1) on element(1);
		class (2,value 2) on element(2);
	    }
	    class (3,value 3);
	}
    }
    route default c
}
connect a b

#define NOTHING

send a nfmark=1 IP_PCK(NOTHING)
send a nfmark=2 IP_PCK(NOTHING)
end
EOF
0.000002 D:01 20 0x00000015
0.000003 D:02 20 0x00000016
# tcsim always preserves protocol when traversing a link ----------------------
tcsim | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 100Mbps {
	dsmark (mask 0,default_index 0) {
	    tcindex (protocol "ip") {
		class (1,value 1) on (0);
	    }
	}
    }
    route default c
}
connect a b

#define NOTHING

send a protocol=ETH_P_IP   IP_PCK(NOTHING)
send a protocol=ETH_P_IPV6 IP_PCK(NOTHING)
end
EOF
0.000002 D:01 20 0x0000000c
0.000003 D:00 20 0x0000000d
# tcsim resets priority when traversing a link --------------------------------
tcsim | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 1Mbps {
	prio (priomap $lo $hi) {
	    $hi = class;
	    $lo = class;
	}
    }
    route default c
}
connect a b

send a priority=0 IP_PCK($ip_tos=1)
send a priority=0 IP_PCK($ip_tos=2)
send a priority=1 IP_PCK($ip_tos=3)
end
EOF
0.000002 D:01 20 0x00000003
0.000162 D:02 20 0x00000004
0.000322 D:03 20 0x00000005
# tcsim -p preserves priority -------------------------------------------------
tcsim -p | tcsim_filter -d dev=c tos
#include "packet.def"

dev a 100Mbps
host {
    dev b
    dev c 1Mbps {
	prio (priomap $lo $hi) {
	    $hi = class;
	    $lo = class;
	}
    }
    route default c
}
connect a b

send a priority=0 IP_PCK($ip_tos=1)
send a priority=0 IP_PCK($ip_tos=2)
send a priority=1 IP_PCK($ip_tos=3)
end
EOF
0.000002 D:01 20 0x00000003
0.000162 D:03 20 0x00000005
0.000322 D:02 20 0x00000004
