I implemented a new network protocol(called QRoute), the Eth protocol code is 0x8000(for unicast) and 0x8001(for multicast), and there are 2 kind of QRoute packets: data packet( the first 2 bytes is 0x40), and control packet(the fist 2 bytes is 0x00, 0x10,0x20 or 0x30). There are 3 kinds of packets in the network: IP packets, Qroute(including unicast and multicast) data packets, and Qroute control packet. I want to classify these 3 kinds of packets, how can I do it? I tried to use: "tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match u16 0x8000 0xffff at -2 flowid 1:10" to classfiy the Qroute unicast packet, but it doesn't work. There is a protocol called "802.1Q" whose Eth protocol code is 0x8001(It can be found in "iproute2/lib/lI_proto.c"), so I tried to use "tc filter add dev eth0 parent 1:0 protocol 802.1Q prio 1 u32 match u16 0x8000 0xffff at -2 flowid 1:10", and it works. but it can't further classify the packets according to the first 2 bytes! And I tried to add protocol {0x8000, "QRoute"} in "iproute2/lib/lI_proto.c and compiled the iproute2 packet again, then tried " tc filter add dev eth0 parent 1:0 protocol QRoute prio 1 u32 match u16 0x8000 0xffff at -2 flowid 1:10", it still doesn't work! anyone can help me ? Thanks very much