#!/bin/sh #set -x IPV6_ADDR_RANGE="3ffe:ffff::f-90" IPV6_ADDR_RANGE_MODE="hexadecimal" #IPV6_ADDR_RANGE_MODE="decimal" IPV6_ADDR_RANGE_LIMIT="256" if [ -z "$IPV6_ADDR_RANGE" ]; then echo "ERROR: range value empty" exit 1 fi ipv6_addr_range_value="`echo $IPV6_ADDR_RANGE | awk -F: '{ print $NF }'`" ipv6_addr_range_suffix_start="`echo $ipv6_addr_range_value | awk -F- '{ print $1 }'`" ipv6_addr_range_suffix_stop="`echo $ipv6_addr_range_value | awk -F- '{ print $2 }'`" 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="`echo $IPV6_ADDR_RANGE | sed "s/$ipv6_addr_range_value$//g"`" if [ -z "$ipv6_addr_range_prefix" ]; then echo "ERROR: prefix cannot be extracted" exit 1 fi echo "Suffix range: $ipv6_addr_range_suffix_start - $ipv6_addr_range_suffix_stop" echo "Prefix: $ipv6_addr_range_prefix" 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}${suffix}" done .