#!/bin/sh # retiolum host functions #@include core netname=${netname:-retiolum} check_free_v4(){ myipv4=${1-10.243.0.-1} v4num=${myipv4##*.} printf "Retard check: " if [ "$v4num" -gt 0 -a "$v4num" -lt "256" ]; then info "No retard detected\n" cd /etc/tinc/$netname/hosts info "Check if ip is still free: " for i in `ls -1`; do if grep -q -e $myipv4\$ $i ;then warn "Host IP already taken by $i! " return 1 fi done info "Passed\n" return 0 else error "you are made of stupid. bailing out\n" return 1 fi cd - >/dev/null } find_active_nodes(){ # TODO this function currently only supports a single address for a host cd /etc/tinc/retiolum/hosts # posix grep does not support [[:space:]] for name in ` grep '^[ ]*Address[ ]*=' * | cut -d: -f1 | sort | uniq `; do if eval "`sed -n ' s/[ ]\+//g s/^\(Address\|Port\)=\(.*\)/\1="\${\1+\$\1\n}\2"/p ' $name`"; then port=${Port-655} for host in $Address; do if nc -zw 2 $host $port 2>/dev/null; then echo "$name [('$host', $port)]" fi & done wait fi & done wait cd - >/dev/null } find_supernodes(){ cd /etc/tinc/retiolum/hosts for name in ` grep '^[ ]*Address[ ]*=' * | cut -d: -f1 | sort | uniq `; do if eval "`sed -n ' s/[ ]\+//g s/^\(Address\|Port\)=\(.*\)/\1="\${\1+\$\1\n}\2"/p ' $name`"; then port=${Port-655} for host in $Address; do if nc -zw 2 $host $port 2>/dev/null; then echo "$name [('$host', $port)]" fi & done wait fi & done wait cd - >/dev/null }