#!/bin/sh
# LEG21062004
#
# Baby router Generator

# $1 = current node
# $2 = network database

# Welcome
echo Baby route Generator
echo This node: $1

# list of nodes
function nodes () {
    sed '/^$1/D' $2 | cut -d: -f1 | sort -u
}


echo All nodes:
nodes $1 $2
echo

# local IP's
function local_ips () {
  sed -n "/$1/s/^\([[:print:]]\+:[[:space:]]*\)\(.*\)\/\(.*\)/\2/p" $2
}


echo local IP\'s:
local_ips $1 $2
echo

# local networks
function local_nets () {
  for i in $(
    sed -n "/$1/s/^\([[:print:]]\+:[[:space:]]*\)\(.*\)/\2/p" $2); do
    ipsc -g $i \
    | sed -n "/^Network address:/s/^Network address:[[:space:]]*\(.*\)/\1/p"
  done \
  | sort -u
}

echo local Networks:
local_nets $1 $2
echo

function neighbours () {
  for net in $(local_nets $1 $2); do 
    sed "/$1\|^$/D" $2 \
    | while read NAME IP ; do
	 THIS_NET=$(
	    ipsc -g $IP  \
	    | sed -n "/^Network address:/s/^Network address:[[:space:]]*\(.*\)/\1/p")
	 if [ "$net" == "$THIS_NET" ]; then
            echo $NAME $THIS_NET
         fi
    done 
  done | cut -d: -f1
}

echo Neighbours:
neighbours $1 $2
echo

# neighbour gateways
function neighbour_gws () {
    LOCAL_NETS=$(local_nets $1 $2)
    LOCAL_NETS=$(echo $LOCAL_NETS  | sed -e "s/ /\\\\|/g")
    for neighbour in $(neighbours $1 $2); do
	NEIGH_NETS=$(local_nets $neighbour $2)
	REMOTE_NETS=$(echo $NEIGH_NETS | sed "s/$LOCAL_NETS//g")
	[ "$(echo $REMOTE_NETS | sed 's/ //g')" ] && echo $neighbour: $REMOTE_NETS
    done | sort -u
}

echo Neighbour gateways:
neighbour_gws $1 $2
echo