#!/bin/bash for dev in eth2 eth1 do ip route flush dev $dev ip link set $dev down ip addr flush dev $dev done ip addr add 192.168.0.1/24 brd + dev eth1 ip link set eth1 up ip addr add 192.168.0.2/24 brd + dev eth2 ip link set eth2 up ip route flush dev eth2 ip route flush dev eth1 ip route add 192.168.0.0/24 dsfield 0xe0 proto static table main dev eth2 ip route add 192.168.0.0/24 dsfield 0xc0 proto static table main dev eth2 ip route add 192.168.0.0/24 dsfield 0x08 proto static table main dev eth2 ip route add 192.168.0.0/24 dsfield 0x88 proto static table main dev eth2 ip route add 192.168.0.0/24 dsfield 0x89 proto static table main dev eth2 ip route add 192.168.0.0/24 dsfield 0x8c proto static table main dev eth2 ip route add 192.168.0.0/24 dsfield 0x00 proto static table main dev eth1 ip route list table main rtn=0 while read tos src comment do ping -Q $tos -c 1 192.168.0.3 > ip-test.$$ if grep -q "from 192.168.$src :" ip-test.$$ ; then msg=ok else msg=FAILED! rtn=$(( $rtn + 1 )) fi echo -e \\ntos $tos should come from $src: $msg grep from ip-test.$$ done <