#!/usr/bin/python
ADDRESS_PREFIX="192.168.11."

neighbors_numeric = [[1,3,4], #0
                     [0,2,5], #1
                     [1,3,6], #2
                     [0,2,7], #3
                     [0,5,7], #4
                     [1,4,6], #5
                     [2,5,7], #6
                     [3,4,6]] #7

neighbors_axis = [[4,3,1], #0
                  [5,2,0], #1
                  [6,1,3], #2
                  [7,0,2], #3
                  [0,7,5], #4
                  [1,6,4], #5
                  [2,5,7], #6
                  [3,4,6]] #7

def add_to_list(l, i):
   if l == []:
      return l.append(i)
   else:
      return [i]

def gen_route(order, node):
   if order == 0:
      return neighbors_axis[node]
   x,y,z=neighbors_axis[node]
   return [gen_route(order-1, x), gen_route(order-1, y), gen_route(order-1, z)]

def makeaddr(id):
   return str(ADDRESS_PREFIX+str(id+1))
   
def print_route(route, gw=None, metric=0):
   if gw==None:
      print "route add -host "+makeaddr(route[0])+" dev eth1 metric 0"
      print "route add -host "+makeaddr(route[1])+" dev eth2 metric 0"
      print "route add -host "+makeaddr(route[2])+" dev eth3 metric 0"
   else:
      print "route add -host "+makeaddr(route[0])+" gw "+ gw +" metric "+str(metric)
      print "route add -host "+makeaddr(route[1])+" gw "+ gw +" metric "+str(metric)
      print "route add -host "+makeaddr(route[2])+" gw "+ gw +" metric "+str(metric)
        
def make_device_map(node):
   dev_map=[]
   dev_map=[gen_route(0, node), gen_route(1, node), gen_route(2, node)]
   return dev_map

def print_table(node):
   d=make_device_map(node)
   print_route(d[0])

   print_route(d[1][0], makeaddr(d[0][0]), 1)
   print_route(d[1][1], makeaddr(d[0][1]), 1)
   print_route(d[1][2], makeaddr(d[0][2]), 1)

   print_route(d[2][0][0], makeaddr(d[1][0][0]), 2)
   print_route(d[2][0][1], makeaddr(d[1][0][1]), 2)
   print_route(d[2][0][2], makeaddr(d[1][0][2]), 2)
   print_route(d[2][1][0], makeaddr(d[1][1][0]), 2)
   print_route(d[2][1][1], makeaddr(d[1][1][1]), 2)
   print_route(d[2][1][2], makeaddr(d[1][1][2]), 2)
   print_route(d[2][2][0], makeaddr(d[1][2][0]), 2)
   print_route(d[2][2][1], makeaddr(d[1][2][1]), 2)
   print_route(d[2][2][2], makeaddr(d[1][2][2]), 2)

