implement software router