#!/bin/sh #set -x IPV6_ADDR_RANGE_START="3ffe:ffff::f" #IPV6_ADDR_RANGE_START="3ffe:fffe::1" #IPV6_ADDR_RANGE_STOP="3ffe:ffff::f" #IPV6_ADDR_RANGE_START="3ffe:ffff::2700" IPV6_ADDR_RANGE_STOP="3ffe:ffff::ffff" IPV6_ADDR_RANGE_MODE="hexadecimal" #IPV6_ADDR_RANGE_MODE="decimal" IPV6_ADDR_RANGE_LIMIT="256" if [ -z "$IPV6_ADDR_RANGE_START" -o -z "$IPV6_ADDR_RANGE_STOP" ]; then echo "ERROR: start or stop empty" exit 1 fi ipv6_addr_range_suffix_start="`echo $IPV6_ADDR_RANGE_START | awk -F: '{ print $NF }'`" ipv6_addr_range_suffix_stop="`echo $IPV6_ADDR_RANGE_STOP | awk -F: '{ print $NF }'`" if [ -z "$ipv6_addr_range_suffix_start" -o -z "$ipv6_addr_range_suffix_stop" ]; then echo "ERROR: start or stop contain not extractable suffix" exit 1 fi ipv6_addr_range_prefix_start="`echo $IPV6_ADDR_RANGE_START | sed "s/$ipv6_addr_range_suffix_start$//g"`" ipv6_addr_range_prefix_stop="`echo $IPV6_ADDR_RANGE_STOP | sed "s/$ipv6_addr_range_suffix_stop$//g"`" if [ -z "$ipv6_addr_range_prefix_start" -o -z "$ipv6_addr_range_prefix_stop" ]; then echo "ERROR: prefix cannot be extracted" exit 1 fi if [ "$ipv6_addr_range_prefix_start" != "$ipv6_addr_range_prefix_stop" ]; then echo "ERROR: prefix of start and stop not equal - currently not supported" exit 1 fi echo "Suffix range: $ipv6_addr_range_suffix_start - $ipv6_addr_range_suffix_stop" echo "Prefix: $ipv6_addr_range_prefix_start" ipv6_addr_range_counter_start="`printf '%d\n' 0x$ipv6_addr_range_suffix_start`" ipv6_addr_range_counter_stop="`printf '%d\n' 0x$ipv6_addr_range_suffix_stop`" echo "Counter range: $ipv6_addr_range_counter_start - $ipv6_addr_range_counter_stop" ipv6_addr_range_suffix=$ipv6_addr_range_counter_start counter=0 # Generate address list while [ $ipv6_addr_range_suffix -le $ipv6_addr_range_counter_stop ]; do case "$IPV6_ADDR_RANGE_MODE" in "decimal") if [ $ipv6_addr_range_suffix -gt 9999 ]; then echo "ERROR: out of range" break fi suffix="$ipv6_addr_range_suffix" ;; "hexadecimal") if [ $ipv6_addr_range_suffix -gt 65535 ]; then echo "ERROR: out of range" break fi suffix="`printf '%x' $ipv6_addr_range_suffix`" ;; *) echo "ERROR: mode not supported: $IPV6_ADDR_RANGE_MODE" ;; esac ipv6_addr_range_suffix=$[ $ipv6_addr_range_suffix + 1 ] counter=$[ $counter + 1 ] if [ $counter -gt $IPV6_ADDR_RANGE_LIMIT ]; then echo "Limit reached" break fi echo "${ipv6_addr_range_prefix_start}${suffix}" done .