Package: gogoc Version: 1:1.2-2 Severity: wishlist Tags: patch I implemented a feature for my own usage which I would like to share. It enables gogoc to advertise subnets of the assigned network on multiple interfaces.
The confiuration is placed in /etc/gogoc/interfaces.conf. All interfaces listed there will get a subnet assigned in numeric order. -- System Information: Debian Release: 6.0.3 APT prefers stable APT policy: (500, 'stable') Architecture: i386 (i686) Kernel: Linux 2.6.32-5-686-bigmem (SMP w/1 CPU core) Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Shell: /bin/sh linked to /bin/bash Versions of packages gogoc depends on: ii iproute 20100519-3 networking and traffic control too ii libc6 2.11.2-10 Embedded GNU C Library: Shared lib ii libgcc1 1:4.4.5-8 GCC support library ii libssl0.9.8 0.9.8o-4squeeze4 SSL shared libraries ii libstdc++6 4.4.5-8 The GNU Standard C++ Library v3 ii net-tools 1.60-23 The NET-3 networking toolkit Versions of packages gogoc recommends: ii radvd 1:1.6-1.1 Router Advertisement Daemon gogoc suggests no packages. -- Configuration Files: /etc/gogoc/gogoc.conf changed [not included] /etc/init.d/gogoc changed [not included] -- no debconf information
--- /usr/share/gogoc/template/linux.sh.vanilla 2010-04-26 14:47:03.000000000 +0200 +++ /usr/share/gogoc/template/linux.sh 2011-12-07 02:29:28.000000000 +0100 @@ -70,6 +70,31 @@ $* # Execute command } +SubInterfaces() +{ + if [ -f /etc/gogoc/interfaces.conf ] ; then + cat /etc/gogoc/interfaces.conf | sed -e 's/#.*$//' -e 's/[[:space:]]*$//' -e 's/^[[:space:]]//' -e '/^$/d' | nl -n ln + fi +} + +SubNet() +{ + net="$1" + mask=64 + test -z "$3" || mask="$3" + sub="$2" + + subnet="`sipcalc -S "$mask" "$net" | grep '^Network' | sed -e 's/^Network[[:space:]]*-[[:space:]]//' -e 's/[[:space:]]*-[[:space:]]*$//'`" + if [ "$sub" -ne 0 ] ; then + pref="`echo "$subnet" | tail -n +2 | head -n "$sub" | tail -n 1`" + else + pref="`echo "$subnet" | head -n 1`" + fi + test -z "$pref" && return 1 + echo "$pref" | sed 's/:0000:0000:0000:0000$//' +} + + # Program localization Display 1 "--- Start of configuration script. ---" @@ -138,6 +163,12 @@ # Remove address from TSP HOME INTERFACE ExecNoCheck $ifconfig $TSP_HOME_INTERFACE inet6 del $TSP_PREFIX::1/64 + + subif="`SubInterfaces`" + echo "$subif" | while read sub int ; do + PREF="`SubNet "${TSP_PREFIX}::0/${TSP_PREFIXLEN}" "$sub"`" + ExecNoCheck $ifconfig "$int" inet6 del ${PREF}::1/64 + done fi # Delete default IPv6 route(s). @@ -245,6 +276,18 @@ Display 1 "Adding prefix to $TSP_HOME_INTERFACE" Exec $ifconfig $TSP_HOME_INTERFACE add $TSP_PREFIX::1/64 + subif="`SubInterfaces`" + echo "$subif" | while read sub int ; do + PREF=`echo $TSP_PREFIX | sed 's/00$//'` + OLDADDR=`$ifconfig "$int" | grep "inet6.* $PREF" | sed -e "s/^.*inet6 addr: //" -e "s/ Scope.*\$//"` + if [ ! -z $OLDADDR ]; then + Display 1 "Removing old IPv6 address $OLDADDR from $int" + Exec $ifconfig "$int" inet6 del $OLDADDR + fi + PREF="`SubNet "${TSP_PREFIX}::0/${TSP_PREFIXLEN}" "$sub"`" + Display 1 "Adding prefix ${PREF} to $int" + Exec $ifconfig "$int" inet6 add "${PREF}::1/64" + done # Stop radvd daemon if it was running. Twice. /etc/init.d/radvd stop @@ -267,6 +310,22 @@ }; EOF + echo "$subif" | while read sub int ; do + PREF="`SubNet "${TSP_PREFIX}::0/${TSP_PREFIXLEN}" "$sub"`" + cat >> "$rtadvdconfigfile" <<EOF +interface $int +{ + AdvSendAdvert on; + AdvLinkMTU 1280; + prefix ${PREF}::/64 + { + AdvOnLink on; + AdvAutonomous on; + }; +}; +EOF + done + # Start the radvd daemon. Display 1 "Starting radvd: $rtadvd -u radvd -C $rtadvdconfigfile" Exec $rtadvd -u radvd -p $rtadvd_pid -C $rtadvdconfigfile --- /dev/null 2011-11-27 19:14:56.647041867 +0100 +++ /etc/gogoc/interfaces.conf 2011-12-07 02:37:02.000000000 +0100 @@ -0,0 +1,8 @@ +# +# Use this file to list interfaces which should get an IPv6 network +# assigned beside the if_prefix setting in gogoc.conf +# + +# Guest networks +#eth1 # well known guests +